线程突然莫名的退出了?

ivanwo 2009-10-19 05:22:40
程序中开了8个线程,其中各有4个线程的入口函数相同,没有需要同步的变量,在DEBUG下有TRACE()打印信息发现:在程序跑了20多分钟左右后,突然有一个线程不能正常打印出信息了,在该线程的入口函数while(1)内设置断点也没有中断,该线程好像突然退出了一样;而且每次调试发现退出的那个线程都一样,不过相同的是跑了一段时间后都只有一个线程退出,真是奇怪?不知大家有没有遇到过这种情况?谢谢!
...全文
1772 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnuke 2009-11-11
  • 打赏
  • 举报
回复
代码贴出来吧,大家都在帮你乱猜。
evileagle 2009-11-10
  • 打赏
  • 举报
回复
不可能是异常,否则进程都退出了,估计是死锁了。。好好检查一下
Kevin_Perkins 2009-10-25
  • 打赏
  • 举报
回复
也许是线程函数处理中发生异常了,线程终止了。
我记得我曾在线程运行中显式调用TerminateThread,然后将线程句柄和ID都重新设置为0,下次通过判断这个句柄值来重新判断是否创建线程,但我发现无法工作。跟踪代码发现走到TerminateThread函数后就退出了,并没有设置句柄值为0。我想情况相似,应该是异常。在此也建议,不要显式调用TerminateThread。
jackzhhuang 2009-10-21
  • 打赏
  • 举报
回复
选菜单的Debug->Thread,看看有多少线程
fpcc 2009-10-21
  • 打赏
  • 举报
回复
死锁或数据处理有问题,这个可能性最大。
dijkstar 2009-10-21
  • 打赏
  • 举报
回复
1. 检查一下有无“冲栈”造成的莫名其妙的线程退出:strcpy、数组操作过下标;
2. 不断增加的内存没有释放,没有检测分配为NULL;
gg606 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 ivanwo 的回复:]
该线程好像突然退出了一样;而且每次调试发现退出的那个线程都一样,不过相同的是跑了一段时间后都只有一个线程退出,[/Quote]

这个线程到底结束了没有?如果结束了,调试时会报结束以及返回值!
bragi523 2009-10-20
  • 打赏
  • 举报
回复
是不是用到临界区?
死锁了?
muzizongheng 2009-10-20
  • 打赏
  • 举报
回复
不是死锁就是阻塞了.
WecanHuang 2009-10-20
  • 打赏
  • 举报
回复
在该线程的入口函数while(1)内设置断点也没有中断,该线程好像突然退出了一样;

有可能是该线程死循环或者阻塞了
felixchan 2009-10-20
  • 打赏
  • 举报
回复
lz,把那部分代码帖上来吧
我个人分析,也许不对:
1、查看下线程的优先级(这个可能性低)
2、程序中是否有阻塞代码,如WaitForSingleObject等地方
3、程序中是否在某个地方有死循环,如while,for等地方
4、实在不行,线程中每行TRACE一下
ziplj 2009-10-19
  • 打赏
  • 举报
回复
不会的
你线程内部都是些什么操作
ivanwo 2009-10-19
  • 打赏
  • 举报
回复
没有调用TeminateThread(),看不出程序有什么异常,不知是不是跟线程代码最末的sleep(20)有关系?
ziplj 2009-10-19
  • 打赏
  • 举报
回复
while(1)???
应该不会主动退出的
是不是哪有TeminateThread的调用
或者程序内部有异常 ???

15,473

社区成员

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

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