Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct _WORK {
- LIST_ENTRY Entry;
- PVOID Routine;
- PVOID Arg;
- HANDLE finished;
- } WORK, *PWORK;
- LIST_ENTRY WorkQueue;
- RTL_CRITICAL_SECTION section;
- HANDLE QueueSem;
- PWORK CreateWork(PVOID aRoutine, PVOID aArg)
- {
- PWORK ret = malloc(sizeof(WORK));
- if (ret != NULL) {
- InicializeListHead(&ret->Entry);
- ret->Routine = aRoutine;
- ret->Arg = aArg;
- ret->finished = CreateEvent(...., NULL); // unnamed
- }
- return ret;
- }
- VOID QueueWork(PWORK aWork)
- {
- EnterCriticalSection(§ion);
- InsertTailList(&WorkQueue, &aWork->Entry);
- LeaveCriticalSection(§ion);
- ReleaseSemaphore(QueueSem, 1ú; // zvysime citac
- return;
- }
- PWORK GetWork(VOID)
- {
- EnterCriticalSection(§ion);
- PWORK ret = RemoveHeadList(&WorkQueue);
- LeaveCriticalSection(§ion);
- return;
- }
- VOID __stdcall ThreadPoolThreadProc(PVOID NevimCo)
- {
- do {
- WaitForSingleObject(QueueSem, INFINITE);
- PWORK wrk = GetWork();
- wrk->Routine(wrk->Arg);
- SetEvent(wrk->Finished;
- } while (!konec);
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement