#include <stdio.h>
#include <process.h>
#include <wtypes.h>
typedef unsigned int (__stdcall * THREAD_FUN_TYPE)(void *);
int ThreadIp(void* param)
{
while(true)
{
printf("I'm runing!\n");
}
return 0;
}
int main()
{
int iThreadNum=100;
HANDLE* phThreads = new HANDLE[iThreadNum];
for (int i=0;i<iThreadNum;++i)
{
phThreads[i]=(HANDLE*)_beginthreadex(NULL, 0, (THREAD_FUN_TYPE)ThreadIp,NULL, NULL, NULL);
}
int nIndex = ::WaitForMultipleObjects(iThreadNum,phThreads,1,INFINITE);
printf("End!\n");
return 0;
}
我希望該計劃將在WaitForMultipleObjects的暫停,直至所有線程都末(直到所有的線程創建成功),但該程序將無法在WaitForMultipleObjects的停止,而所有線程仍在運行。所以,我嘗試使用SetEvent的,但還是同樣的問題:C++等待所有線程完成
int iThreadNum=100;
HANDLE* phThreads = new HANDLE[iThreadNum];
for (int i=0;i<iThreadNum;++i)
{
phThreads[i]=CreateEvent(NULL, FALSE, FALSE,NULL);
ResetEvent(phThreads[i]);
}
int nIndex = ::WaitForMultipleObjects(iThreadNum,phThreads,1,INFINITE);
100個線程是很多線程。你的機器有多少核心? – doctorlove
它有8個核心。好的,我剛剛看到你的回覆 – Gank
它不會一次運行你所有的線程,然後:-) – doctorlove