这里记录一下多线程的建立。中间耽搁了我不少的时间。
这里面可以建立大量线程同时运行。ThreadGetDeviceFun() 是要运行的函数。
MAX_COUNT 是个常亮,其实可以指针来写。
重点是在WaitForMultipleObjects()上。
线程过多会导致WaitForMultipleObjects不起作用。原因是 WaitForMultipleObjects 第一个参数只能最大64,具体可以参考手册。所以下面有个wihle循环的处理。另外函数的具体用法和参数还是要看手册。
#define MAX_COUNT 200
HANDLE *handle = new HANDLE[MAX_COUNT ];
for (d = alldevs; d; d = d->next)
{
HANDLE temphandle = (HANDLE)_beginthreadex(NULL, 0, ThreadGetDeviceFun, d, 0, NULL);
if (temphandle)
{
handle[i] = temphandle;
i++;
}
}
int tempNumThreads = i;
int tempMax = 0;
while (tempNumThreads >= MAXIMUM_WAIT_OBJECTS)
{
tempNumThreads -= MAXIMUM_WAIT_OBJECTS;
WaitForMultipleObjects(MAXIMUM_WAIT_OBJECTS, &handle[tempMax], TRUE, INFINITE);
tempMax += MAXIMUM_WAIT_OBJECTS;
}
WaitForMultipleObjects(tempNumThreads, &handle[tempMax], TRUE, INFINITE);
//这里等待线程执行完毕
记一下 ThreadGetDeviceFun();
unsigned int __stdcall ThreadGetDeviceFun(void * device)
{
return 0;
}