![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define NUMBER_OF_THREADS 10
HANDLE hThreads[NUMBER_OF_THREADS];
HANDLE hSemaphore;
DWORD WINAPI ThreadProc(LPVOID lpParam);
void CreateThreadsAndRun(int numberOfRunningThreads);
void CloseThreadHandles();
int main() {
int numberOfRunningThreads = 3;
CreateThreadsAndRun(numberOfRunningThreads);
WaitForMultipleObjects(NUMBER_OF_THREADS,hThreads,TRUE,INFINITE);
_getch();
return 0;
}
void CreateThreadsAndRun(int numberOfRunningThreads) {
hSemaphore = CreateSemaphore(NULL,numberOfRunningThreads,numberOfRunningThreads,NULL);
if (hSemaphore == NULL) {
printf("Error creating semapore");
exit(0);
}
DWORD threadId;
for (int i = 0; i < NUMBER_OF_THREADS; i++) {
hThreads[i] = CreateThread(NULL,0,ThreadProc,NULL,0,&threadId);
if (! hThreads[i]) {
printf("Thread Creation Error");
exit(0);
} else {
printf("%u\tThread\t%d\tcreated\n",GetTickCount(),threadId);
}
}
}
void CloseThreadHandles() {
for (int i = 0; i < NUMBER_OF_THREADS; i++) {
CloseHandle(hThreads[i]);
}
}
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
UNREFERENCED_PARAMETER(lpParam);
DWORD dwWaitResult;
printf("%u\tThread\t%d\twaiting\n", GetTickCount(), GetCurrentThreadId());
WaitForSingleObject(hSemaphore,INFINITE);
printf("%u\tThread\t%d\trunninng\n ",GetTickCount(), GetCurrentThreadId());
Sleep(1000);
printf("%u\tThread\t%d\texiting\n", GetTickCount(), GetCurrentThreadId());
ReleaseSemaphore(hSemaphore,1,NULL);
return 1;
}
Дата публикования: 2015-10-09; Прочитано: 244 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!