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