C++ C++;等待所有线程完成 #包括 #包括 #包括 typedef unsigned int(u stdcall*THREAD_FUN_TYPE)(void*); int ThreadIp(void*param) { while(true) { printf(“我正在跑步!\n”); } 返回0; } int main() { int-iThreadNum=100; HANDLE*phThreads=新句柄[iThreadNum]; 对于(int i=0;i
您应该等待线程句柄,而不是不相关的事件: 试着这样做:C++ C++;等待所有线程完成 #包括 #包括 #包括 typedef unsigned int(u stdcall*THREAD_FUN_TYPE)(void*); int ThreadIp(void*param) { while(true) { printf(“我正在跑步!\n”); } 返回0; } int main() { int-iThreadNum=100; HANDLE*phThreads=新句柄[iThreadNum]; 对于(int i=0;i,c++,multithreading,winapi,events,wait,C++,Multithreading,Winapi,Events,Wait,您应该等待线程句柄,而不是不相关的事件: 试着这样做: 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 = ::WaitForMultipleObjec
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);
int-iThreadNum=100;
HANDLE*phThreads=新句柄[iThreadNum];
对于(int i=0;i您应该等待线程句柄,而不是不相关的事件:
试着这样做:
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);
int-iThreadNum=100;
HANDLE*phThreads=新句柄[iThreadNum];
对于(int i=0;i如果线程数较少,它是否有效?如果线程数超过最大等待对象数,则需要进行额外的工作
nCount[in]指向的数组中的对象句柄数
lpHandles。对象句柄的最大数目为
最大\u等待\u对象数。此参数不能为零
进行讨论
可能还需要检查等待函数返回的内容。如果线程数较少,它是否有效?如果线程数超过最大等待对象数,则需要额外工作
nCount[in]指向的数组中的对象句柄数
lpHandles。对象句柄的最大数目为
最大\u等待\u对象数。此参数不能为零
进行讨论
可能也值得检查wait函数返回的内容。我会在调用_beginthreadex之前分配一个结构,并通过threads参数传递指向该结构的指针,并让该结构包含一个bool,该bool在完成时由线程设置
int iThreadNum=100;
HANDLE* phThreads = new HANDLE[iThreadNum];
for (int i=0;i<iThreadNum;++i)
{
m_iCurThreadNum=i;
phThreads[i] = _beginthreadex(...);
}
int nIndex = ::WaitForMultipleObjects(iThreadNum,phThreads,1,INFINITE);
struct-ThreadStruct{
布尔多;
字符*参数数据;
int参数化;
};
int ThreadIp(void*param)
{
ThreadStruct*ts=(ThreadStruct*)参数;
while(true)
{
printf(“我正在跑步!\n”);
}
ts->Done=true;
返回0;
}
int main()
{
int-iThreadNum=100;
HANDLE*phThreads=新句柄[iThreadNum];
ThreadStruct*structs=新的ThreadStruct[iThreadNum];
对于(int i=0;i我将在调用_beginthreadex之前分配一个结构,并通过threads参数传递指向该结构的指针,并使该结构包含一个bool,该bool在完成时由线程设置
int iThreadNum=100;
HANDLE* phThreads = new HANDLE[iThreadNum];
for (int i=0;i<iThreadNum;++i)
{
m_iCurThreadNum=i;
phThreads[i] = _beginthreadex(...);
}
int nIndex = ::WaitForMultipleObjects(iThreadNum,phThreads,1,INFINITE);
struct-ThreadStruct{
布尔多;
字符*参数数据;
int参数化;
};
int ThreadIp(void*param)
{
ThreadStruct*ts=(ThreadStruct*)参数;
while(true)
{
printf(“我正在跑步!\n”);
}
ts->Done=true;
返回0;
}
int main()
{
int-iThreadNum=100;
HANDLE*phThreads=新句柄[iThreadNum];
ThreadStruct*structs=新的ThreadStruct[iThreadNum];
对于(int i=0;i哪种故障?程序是否在~WaitForMultipleObjects~上停止?请在相应的线程函数中添加打印,并查看线程是否在很短的时间内运行。我已编辑了该问题。我希望所有线程的工作都完成,然后我可以做更多的事情。哪种故障?程序是否在~WaitForMultipleObj~上停止ects~?请在各自的线程函数中添加打印,看看线程是否在很短的时间内运行。我已编辑了问题。我希望所有线程的工作都完成,然后我可以做更多的事情。100个线程是很多线程。您的机器有多少个内核?它有8个内核。很抱歉,我刚刚看到您的回复。它不会一次运行所有线程n:-)100个线程就是很多线程。你的机器有多少个内核?它有8个内核。很抱歉,我刚刚看到你的回复。它不会一次运行所有线程。那么:-)