C++ 多线程:_beginthreadex和WaitForMultipleObjects

这里记录一下多线程的建立。中间耽搁了我不少的时间。

这里面可以建立大量线程同时运行。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;
}

 

你可能感兴趣的:(C++)