VC++ 多线程
发布网友
发布时间:2022-04-24 17:02
我来回答
共2个回答
热心网友
时间:2023-10-24 14:00
你要考虑到你开辟线程以后,如果线程还没执行到flag=false,那么此时flag还是true,但是主线程已经if(flag==true)了,你就死了。
你创建线程用的_beginthreadex函数是吧?(如果是_beginthread,请换成_beginthreadex),这个函数有返回值,可以强制转为HANDLE类型:
HANDLE hThread = (HANDLE) _beginthreadex(...);
然后这个hThread是可以等待的:
WaitForSingleObject(hThread, INFINITE);
线程结束之前,这个WaitForSingleObject函数不会返回。
等待完毕之后关闭HANDLE释放资源:
CloseHandle(hThread);
连起来就是:
for(....)
{
HANDLE hThread = (HANDLE) _beginthreadex(开辟线程;
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
线程函数里
{
线程函数内容;
return 0
}
热心网友
时间:2023-10-24 14:01
启动线程时会返回线程句柄。
使用API函数waitforsingleobject来等待线程结束。
有关waitforsingleobject的介绍
http://ke.baidu.com/view/908866.htm
第一个参数填线程句柄,第二个参数填超时值,如果填INFINITE则无限等待
这样的话不需要标志位。但主线程会在waitforsingleobject函数上阻塞。
如果不想被阻塞的话,可以使用消息机制。
线程函数里return 0;之前使用PostMessage对主线程的窗口发送自定义消息,通知主线程“我已经结束了”。然后主线程对该自定义消息的处理即是开启下一个新线程。