VC++ 多线程

写了1个线程,想着在主线程中用一个for循环不断的开辟这个线程然后执行,要求上一个线程执行完毕后才开辟下一个线程,因为线程是执行完毕后自动关闭,所以我想着在线程函数ret... 写了1个线程,想着在主线程中用一个for循环不断的开辟这个线程然后执行,要求上一个线程执行完毕后才开辟下一个线程,因为线程是执行完毕后自动关闭,所以我想着在线程函数return语句前,加一个标志位,来判断线程是否执行完毕,这样长时间运行会不会出错,代码的结构大概是:
for(....)
{
if(flag==true)
{
开辟线程;
}
}

线程函数里
{
flag=flase;
线程函数内容;
flag=true;
return 0
}
如何才能真正判断该线程完毕
展开
 我来答
空雪梦见
2013-05-27 · TA获得超过5596个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1124万
展开全部
你要考虑到你开辟线程以后,如果线程还没执行到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
}
更多追问追答
追问
谢谢你的回答,   但是请问主线程在判断小线程结束时自身不能停止运行, 这怎么办啊,
追答
“这怎么办”是什么……进了WaitForSingleObject函数以后,在子线程退出之前是不会返回的
挨踢老李
2013-05-27 · TA获得超过876个赞
知道小有建树答主
回答量:1176
采纳率:50%
帮助的人:931万
展开全部
启动线程时会返回线程句柄。
使用API函数waitforsingleobject来等待线程结束。
有关waitforsingleobject的介绍
http://baike.baidu.com/view/908866.htm
第一个参数填线程句柄,第二个参数填超时值,如果填INFINITE则无限等待
这样的话不需要标志位。但主线程会在waitforsingleobject函数上阻塞。
如果不想被阻塞的话,可以使用消息机制。
线程函数里return 0;之前使用PostMessage对主线程的窗口发送自定义消息,通知主线程“我已经结束了”。然后主线程对该自定义消息的处理即是开启下一个新线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式