一个critical_section的有关问题

求助一个critical_section的问题。
程序非常简单,一个报数程序。创建N个线程,每个线程报一个数。

#include <windows.h>
#include <process.h>
#include <stdio.h>

CRITICAL_SECTION g_cs;
int g_nCount = 0;

unsigned  __stdcall  ThreadFun(PVOID pM)
{
EnterCriticalSection(&g_cs);
g_nCount++;
printf("线程ID号为%4d的子线程报数%d\n", GetCurrentThreadId(), g_nCount);
LeaveCriticalSection(&g_cs);
_endthreadex(0);
return 0;
}


int main()
{
const int THREAD_NUM = 100;
HANDLE handle[THREAD_NUM];
InitializeCriticalSection(&g_cs);
for (int i = 0; i < THREAD_NUM; i++)
{
handle[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, (PVOID)&i, 0, NULL);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
for (int i = 0; i < THREAD_NUM; i++)
{
CloseHandle(handle[i]);
}
DeleteCriticalSection(&g_cs);
return 0;
}


但是为什么我每次运行,数都没报完就停止了,这是什么原因?下图就是一个示例。
一个critical_section的有关问题
------解决思路----------------------
WaitForMultipleObjects 有限制的, 最多MAXIMUM_WAIT_OBJECTS, 也就是64
具体看MSDN

nCount 
[in] Number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS. 
------解决思路----------------------
The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.

64.