主线程判断子线程完全结束后再返回,怎么实现?

my12121 2007-01-30 04:11:32
主线程必须判断子线程结束,再往下执行。主线程这样实现的还是有问题,线程结束滞后:
while(1)
{
GetExitCodeThread(hThread,&ExitCode);
if(ExitCode==STILL_ACTIVE)
Sleep(10000);
else
break;
}
怎么改???

另外线程里是一个死循环,判断条件满足就ExitThread();现在发现界面操作响应巨慢,怎么回事呢?
...全文
439 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyl168 2007-03-07
  • 打赏
  • 举报
回复
mark
chair3 2007-01-31
  • 打赏
  • 举报
回复
楼主笨笨。。。。别人给你很多正确的意见,你就不要坚持己见了。

赶紧写代码测试去吧。呵呵
cutftp 2007-01-31
  • 打赏
  • 举报
回复
WaitForSingleObject()
my12121 2007-01-31
  • 打赏
  • 举报
回复
1.各位大侠,我试了一下,界面响应巨慢的问题不是由Sleep造成的,是因为我在创建线程时给了它更高的优先级。
2.如果不用sleep的方法,WaitForSingleObject()也不可以是为啥呢?现在子线程还是可以结束的,关键是主线程得不到这个结束的信息,早早的就把后面的事情给做了...
whiteclouds 2007-01-31
  • 打赏
  • 举报
回复
Sleep的效果相当于一个循环,Sleep(10000)会使程序在这里空转很久,别的线程根本不会得到执行机会。PostMessage也只在函数退出时才会把消息发出去,lz的问题只有使用线程同步才能解决,如共享锁、信号灯之类
yjgx007 2007-01-31
  • 打赏
  • 举报
回复
http://www.geekclaw.com/blog/post/56.html
hxfjb 2007-01-30
  • 打赏
  • 举报
回复
1 如果有界面线程,就是工作线程和界面线程的同步问题,必须通过SendMessage或者PostMessage让工作线程发送消息给界面线程,否则界面线程就会"死"掉.
2 如果是Win32程序或者控制台程序,WaitForSingleObject肯定可以的.
wangstrong4230 2007-01-30
  • 打赏
  • 举报
回复
crumpy() 说的没有错,就是用
if(hThread != NULL)
{
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}

楼主的方法就算成功了也是一个比较笨的方法,呵呵。
my12121 2007-01-30
  • 打赏
  • 举报
回复
晕那,理论上来说这种方式不是应该可以嘛? 我判断线程滞后是这样做的:this传过去一个int值,线程中改变它,主线程判断子线程结束了就把这个int值输出,结果值早早的就输出了,线程的信息N久之后才输出。

Event可以搞定嘛? 跟界面的操作有关系没?
  • 打赏
  • 举报
回复
现在发现界面操作响应巨慢,怎么回事呢?
因为你调用了Sleep(10000);

最好的解决办法,在线程结束的时候向主线程PostThreadMessage
然后主程序再相应这个消息向下走
@@鹏~~~ 2007-01-30
  • 打赏
  • 举报
回复
用Event试试
crumpy 2007-01-30
  • 打赏
  • 举报
回复
什么不行?
什么叫线程结束滞后? 什么意思?
my12121 2007-01-30
  • 打赏
  • 举报
回复
试过了,一样的,不行哦。
crumpy 2007-01-30
  • 打赏
  • 举报
回复
在主线程中用WaitForSingleObject(hChildTread, INFINITE);等待子线程结束

hChildThread是子线程的句柄

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧