user-0 提问: 等待的线程还未结束，WaitForMultipleObjects()就已经执行了……

回复:
user: user-1
content: 引用 7 楼 paschen 的回复:你可以分成两个WaitForMultipleObjects()，去等待各个线程，各个等待成功后将一个事件对象置为有信号，最后等待各个事件对象都有信号..... 他那个没问题

user: user-1
content: 引用 3 楼 tzblue 的回复:[quote=引用 1 楼 bravery36 的回复:] CreateFileW要关掉handle，不然文件不一定会马上创建的。  其实原本是在主线程函数的末尾输出一条语句，来体现 WaitForMultipleObjects()的作用，但发现没等所有线程结束，这条语句就输出来了。看到有人说可能是输出缓存没有即使更新到屏幕上，我就想，用创建文件的方式替代输出语句。如果 WaitForMultipleObjects()起作用，那么主线程创建的文件一定在最后。但问题就如主题帖所述，暂时没想到问题出在了哪里。[/quote]   多线程执行顺序是不一样的。。缓存不一定会立刻刷新

user: user-2
content: 你可以分成两个WaitForMultipleObjects()，去等待各个线程，各个等待成功后将一个事件对象置为有信号，最后等待各个事件对象都有信号.....

user: user-2
content: 已经超过最大允许的数量（64）了  https://msdn.microsoft.com/en-us/library/ms687025(VS.85).aspx  Parameters  nCount [in]      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. lpHandles [in]      An array of object handles. For a list of the object types whose handles can be specified, see the following Remarks section. The array can contain handles to objects of different types. It may not contain multiple copies of the same handle.      If one of these handles is closed while the wait is still pending, the function's behavior is undefined.      The handles must have the SYNCHRONIZE access right. For more information, see Standard Access Rights. bWaitAll [in]      If this parameter is TRUE, the function returns when the state of all objects in the lpHandles array is signaled. If FALSE, the function returns when the state of any one of the objects is set to signaled. In the latter case, the return value indicates the object whose state caused the function to return. dwMilliseconds [in]      The time-out interval, in milliseconds. If a nonzero value is specified, the function waits until the specified objects are signaled or the interval elapses. If dwMilliseconds is zero, the function does not enter a wait state if the specified objects are not signaled; it always returns immediately. If dwMilliseconds is INFINITE, the function will return only when the specified objects are signaled.

user: user-3
content: 引用 4 楼 tajon1226 的回复:#define MAXIMUM_WAIT_OBJECTS 64 哦哦，我都忘了这玩意了，大牛果然是大牛。  DWORD WINAPI WaitForMultipleObjects(   __in          DWORD nCount,   __in          const HANDLE* lpHandles,   __in          BOOL bWaitAll,   __in          DWORD dwMilliseconds );  Parameters nCount  The number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.  100个object超标了。

user: user-0
content: 感谢楼上诸位朋友的解答，非常感谢！！！

user: user-0
content: 引用 7 楼 paschen 的回复:你可以分成两个WaitForMultipleObjects()，去等待各个线程，各个等待成功后将一个事件对象置为有信号，最后等待各个事件对象都有信号.....   我用了一个循环， WaitForSingleObject()等待每一个线程，比较笨拙。刚看了楼上各位的解释，豁然开朗，以后读MSDN文档要仔细了。谢谢！！！

user: user-0
content: 引用 4 楼 tajon1226 的回复:#define MAXIMUM_WAIT_OBJECTS 64  请允许我叫你一声 “大牛！”

user: user-4
content: #define MAXIMUM_WAIT_OBJECTS 64

user: user-0
content: 引用 1 楼 bravery36 的回复:CreateFileW要关掉handle，不然文件不一定会马上创建的。  其实原本是在主线程函数的末尾输出一条语句，来体现 WaitForMultipleObjects()的作用，但发现没等所有线程结束，这条语句就输出来了。看到有人说可能是输出缓存没有即使更新到屏幕上，我就想，用创建文件的方式替代输出语句。如果 WaitForMultipleObjects()起作用，那么主线程创建的文件一定在最后。但问题就如主题帖所述，暂时没想到问题出在了哪里。

user: user-0
content: 引用 1 楼 bravery36 的回复:CreateFileW要关掉handle，不然文件不一定会马上创建的。  感谢回复！  添加了一行语句 CloseHandle(文件句柄);    问题没有改善，看文件的创建时间，主线程创建的文本大约在所有文本创建时间的中间。

user: user-3
content: CreateFileW要关掉handle，不然文件不一定会马上创建的。