Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Учебный проект для работы с событиями. #include <windows.h>



#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; Прочитано: 221 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...