47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
#include "winthread.h"
|
|
|
|
TaskData yourTaskData;
|
|
ThreadPoolThread g_ThreadPool[MAX_THREADS];
|
|
|
|
DWORD WINAPI WorkerThread(LPVOID lpParam) {
|
|
TaskData* pData = (TaskData*)lpParam;
|
|
|
|
// Your thread's work goes here
|
|
// ...
|
|
|
|
// Release any resources or perform cleanup if needed
|
|
// ...
|
|
|
|
return 0;
|
|
}
|
|
|
|
void InitializeThreadPool() {
|
|
// Initialize the critical section
|
|
InitializeCriticalSection(&g_ThreadPool[0].pData->lock);
|
|
|
|
for (int i = 0; i < MAX_THREADS; ++i) {
|
|
// Initialize your task data structure and other necessary members
|
|
// ...
|
|
|
|
// Create threads
|
|
g_ThreadPool[i].pData = &yourTaskData; // Set your task data
|
|
g_ThreadPool[i].hThread = CreateThread(NULL, 0, WorkerThread, g_ThreadPool[i].pData, 0, NULL);
|
|
}
|
|
}
|
|
|
|
void CleanupThreadPool() {
|
|
for (int i = 0; i < MAX_THREADS; ++i) {
|
|
// Perform any cleanup or signal threads to exit gracefully
|
|
// ...
|
|
|
|
// Wait for thread termination
|
|
WaitForSingleObject(g_ThreadPool[i].hThread, INFINITE);
|
|
|
|
// Close thread handle
|
|
CloseHandle(g_ThreadPool[i].hThread);
|
|
}
|
|
|
|
// Delete the critical section
|
|
DeleteCriticalSection(&g_ThreadPool[0].pData->lock);
|
|
}
|