排查bug 搞了一个下午 最后才定位这个函数 一看API 居然是最大等待个数限制
谨以此文 祭奠那些逝去的细胞
The number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS. This parameter cannot be zero.
参见WinNT.h
#define MAXIMUM_WAIT_OBJECTS 64 // Maximum number of wait objects
因而当线程数多于64时WaitForMultipleObjects应做如下更改:
int tempNumThreads = numThreads;
int tempMax = 0;
while( tempNumThreads >= MAXIMUM_WAIT_OBJECTS )
{
tempNumThreads -= MAXIMUM_WAIT_OBJECTS;
WaitForMultipleObjects( MAXIMUM_WAIT_OBJECTS, &hThread[ tempMax], TRUE, INFINITE);
tempMax += MAXIMUM_WAIT_OBJECTS;
}
WaitForMultipleObjects( tempNumThreads, &hThread[ tempMax ], TRUE, INFINITE);