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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值