Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »