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

UptoLike

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

ReleaseMutex( hDrawMutex ); // разрешить выполнение
// других потоков
}
}
else
{
// Исключающий семафор не используется,
// разрешить выполнение потока.
DrawProc( *pdwThreadID ) ;
}
}
// Этот оператор неявно вызывает команду ExitThread.
return ( 0L ) ;
}
Функция DrawProc предназначена для рисования прямоугольников.
Однако во избежание перегрузки системы из-за передачи большого количества
мелких сообщений между программой и подсистемой Win32 обращение к GDI
не всегда происходит сразу же. Поэтому графические команды становятся в
очередь и периодически выполняются все одновременно. Такие задержки
несколько преуменьшают влияние приоритетов потоков в программе Threads.
/*DRAW PROC - Рисует хаотически расположенные прямоугольники. */
void DrawProc ( DWORD dwID )
{
if (bUseMutex)
{
iTotal = 50; // Если выполняется только один поток,
} // разрешить ему рисовать большее число фигур.
else
{
iTotal = 1;
}
// сброс генератора случайных чисел
srand( iRandSeed++ );
// получение размеров окна
bError = GetClientRect( hwndChild[dwID], &rcClient );
if( ! bError ) return;
cxClient = rcClient.right - rcClient.left;
cyClierit = rcClient. bottom - rcClient.top;
//не рисовать, если не заданы размеры окна
if( ( ! cxClient ) || ( ! cyClient ) )
{
15
                        ReleaseMutex( hDrawMutex ); // разрешить выполнение
                                                    // других потоков
                   }
            }
            else
            {
                        // Исключающий семафор не используется,
                        // разрешить выполнение потока.
                   DrawProc( *pdwThreadID ) ;
            }
      }
             // Этот оператор неявно вызывает команду ExitThread.
      return ( 0L ) ;
}

     Функция DrawProc предназначена для рисования прямоугольников.
Однако во избежание перегрузки системы из-за передачи большого количества
мелких сообщений между программой и подсистемой Win32 обращение к GDI
не всегда происходит сразу же. Поэтому графические команды становятся в
очередь и периодически выполняются все одновременно. Такие задержки
несколько преуменьшают влияние приоритетов потоков в программе Threads.

/*DRAW PROC - Рисует хаотически расположенные прямоугольники. */
void DrawProc ( DWORD dwID )
{
      if (bUseMutex)
      {
              iTotal = 50;            // Если выполняется только один поток,
      }                               // разрешить ему рисовать большее число фигур.
      else
      {
              iTotal = 1;
      }
                                           // сброс генератора случайных чисел
      srand( iRandSeed++ );
                                           // получение размеров окна
      bError = GetClientRect( hwndChild[dwID], &rcClient );
      if( ! bError ) return;
      cxClient = rcClient.right - rcClient.left;
      cyClierit = rcClient. bottom - rcClient.top;
                             //не рисовать, если не заданы размеры окна
      if( ( ! cxClient ) || ( ! cyClient ) )

      {

                                        15