Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по технологиям программирования.pdf
Скачиваний:
53
Добавлен:
02.06.2015
Размер:
4.73 Mб
Скачать

Как можно приостановить работу потока?

Sleep (dwMilliseconds) ;

WaitForSingleObject

(hHandle, dwMilliseconds) ;

WaitForMultipleObjects (nCount,*lpHandles, bWaitAll,dwMilliseconds);

dwMilliseconds={0.N. INFINITE}

ПРИМЕР 2

#include <process.h> #include <iostream>

void ThreadFunc( void * arg)

{

char **str= (char**)arg; std::cout <<str[0]<<std::endl;

std::cout<<str[1]<< std::endl;

_endthread( ); return ;

};

int main(int argc, char* argv[])

{char * InitStr1[2] = {"Firstthread running!","11111 char * InitStr2[2] = {"Second thread running!","22222 HANDLE hThreads[2];

hThreads[0] = (HANDLE)_beginthread(ThreadFunc,0, InitStr1); hThreads[1] = (HANDLE)_beginthread(ThreadFunc,0, InitStr2);

WaitForMultipleObjects(2, hThreads, TRUE, INFINITE ); CloseHandle( hThreads[0] );

CloseHandle( hThreads[1] ); return 0;

}

Объекты синхронизации

Мьюекс (Mutex)

Критическая секция (Criticalsection)

Событие ( Event)

Семафор (Semaphore)

Мьютекс. ПРИМЕР3

HANDLE hMutex;

int a[ 5 ];

void Thread( void* pParams)

{

int i, num = 0;

while ( TRUE )

{

WaitForSingleObject( hMutex, INFINITE ); for ( i = 0; i < 5; i++ ) a[ i ] = num;

ReleaseMutex( hMutex ); num++;

}

}

bInitialOwner = FALSE

int main( void )

{

hMutex = CreateMutex( NULL, FALSE, NULL );

_beginthread( Thread, 0, NULL );

while( TRUE )

{

WaitForSingleObject( hMutex, INFINITE ); printf( "%d %d %d %d %d\n",

a[ 0 ], a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ] );

ReleaseMutex( hMutex );

}

return

}