Операционные системы. Марапулец Ю.В. - 14 стр.

UptoLike

Составители: 

THREAD_PRIORITY_ABOVE_NORMAL ) ;
break;
default:
break;
}
break;
default:
break;
}
return;
}
5. Рассмотреть функции для выполнения операций с потоками.
Создав
вторичные потоки, функция Main_OnCreate при каждом вызове функции
CreateThread передает ей указатель на функцию StartThread. Последняя
становится стартовой функцией для всех потоков. Она начинает и завершает их
выполнение.
Если флаг bUseMutex имеет значение TRUE,
потоки ожидают разрешения
исключающего семафора, который обеспечивает одновременное выполнение
графических операций только одним потоком.
/*START THREAD - Эта процедура вызывается на начальном этапе
выполнения каждого потока. */
LONG StartThread ( LPVOID lpThreadData )
{
DWORD *pdwThreadID; // указатель на переменную типа DWORD
// для записи идентификатора потока
DWORD dwWait; // результирующее значение
// функции WaitForSingleObject
// получение идентификатора потока
pdwThreadID = lpThreadData;
// Выполнение графических операций до тех пор, пока
// значение флага bTerminate не станет равным TRUE.
while( ! bTerminate )
{
if (bUseMutex) // Используется ли исключающий семафор?
{
// Выполнение действий при получении разрешения
// от исключающего семафора.
dwWait = WaitForSingleObject( hDrawMutex, INFINITE );
if( dwWait == 0 )
{
DrawProc( *pdwThreadID ); // рисование
// прямоугольников
14
                                         THREAD_PRIORITY_ABOVE_NORMAL ) ;
                                break;
                          default:
                                break;
                 }
                 break;
           default:
                 break;
     }
     return;
}

      5. Рассмотреть функции для выполнения операций с потоками. Создав
вторичные потоки, функция Main_OnCreate при каждом вызове функции
CreateThread передает ей указатель на функцию StartThread. Последняя
становится стартовой функцией для всех потоков. Она начинает и завершает их
выполнение.
      Если флаг bUseMutex имеет значение TRUE, потоки ожидают разрешения
исключающего семафора, который обеспечивает одновременное выполнение
графических операций только одним потоком.

/*START THREAD - Эта процедура вызывается на начальном этапе
выполнения каждого потока. */
LONG StartThread ( LPVOID lpThreadData )
{
     DWORD *pdwThreadID;            // указатель на переменную типа DWORD
                                     // для записи идентификатора потока
     DWORD dwWait;                    // результирующее значение
                                     // функции WaitForSingleObject
                                     // получение идентификатора потока
     pdwThreadID = lpThreadData;
           // Выполнение графических операций до тех пор, пока
           // значение флага bTerminate не станет равным TRUE.
     while( ! bTerminate )
     {
           if (bUseMutex)       // Используется ли исключающий семафор?
           {
                        // Выполнение действий при получении разрешения
                        // от исключающего семафора.
                  dwWait = WaitForSingleObject( hDrawMutex, INFINITE );
                  if( dwWait == 0 )
                  {
                        DrawProc( *pdwThreadID ); // рисование
                                                       // прямоугольников

                                           14