急急急~线程死亡?

ChrisNada 2008-09-26 08:38:31
  想不到有分 刚才那贴不算~
线程执行Run函数,函数里是一个while( true ) 死循环,利用WaitForMultipleObjects(),等待事件发生并处理.但在线程运行的时候竟然无故死亡(不是100%再现),将断点设在循环里无反映.想问大虾们这种情况是怎么回事?怎么避免?
  小弟是新手,没有多少分,愿大虾们怀着济世之心救救我.
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WinEggDrop 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 ChrisNada 的帖子:]
  想不到有分 刚才那贴不算~
线程执行Run函数,函数里是一个while( true ) 死循环,利用WaitForMultipleObjects(),等待事件发生并处理.但在线程运行的时候竟然无故死亡(不是100%再现),将断点设在循环里无反映.想问大虾们这种情况是怎么回事?怎么避免?
  小弟是新手,没有多少分,愿大虾们怀着济世之心救救我.
[/Quote]

如果你WaitForMultipleObjects()中是永远的等待的话,如果没退出这个API返回的条件的话,一直是在这个API中等待.如果不是设置了永远等待的话,检查这个API返回值.
ChrisNada 2008-09-27
  • 打赏
  • 举报
回复
  可能我没说清楚吧~线程肯定是完蛋的了(就是不知道怎么完蛋的),我设了WaitForMultipleObjects()的最大等待时间,也就是说有WaitTimeOut的流程,外部没事件还是一样可以跑.在处发事件的地方我都设了断点,确定在死之前没有任何外部模块或本模块发结束线程的消息.反正就是死的莫名其妙的.以上是在Window XP下跑出来的.
  换到Window CE再跑,同样的数据但是就是没死,而且象是跑得很快乐的样子(数据制作的飞快).
ChrisNada 2008-09-27
  • 打赏
  • 举报
回复
哎~还是没找到解决办法,
在Window Xp上必死~在Window CE里跑得非常快乐.真是摸不着头脑.
谢谢各位大虾了~~!
蒋晟 2008-09-27
  • 打赏
  • 举报
回复
看看消息循环里面其他的代码是否有违捕获的异常
使用更高版本的编译器编译(看看MSDN中Compiler Security Checks In Depth这篇文章)

xsc2001 2008-09-26
  • 打赏
  • 举报
回复
线程无故死亡是什么意思?无故终止了(结束了)呢,还是线程出错了?
这种错误可以用日志文件来记录,记录详细一点,最后出错了再反向扫描日志文件,这样可以定位到错误的代码行。
cnzdgs 2008-09-26
  • 打赏
  • 举报
回复
线程同步没有处理好,死锁了。
youngsissi 2008-09-26
  • 打赏
  • 举报
回复
可能跳出循环了,在return处设断点看看。
dirdirdir3 2008-09-26
  • 打赏
  • 举报
回复
WaitForMultipleObjects()本来就是等待事件等来了才会继续执行的,如果没有object被signal了的话就不会继续执行下面的语句............
red-fly 2008-09-26
  • 打赏
  • 举报
回复
是否意外结束了while循环?
scklotz 2008-09-26
  • 打赏
  • 举报
回复
在处理代码里加上 try ... catch 捕获一下错误

15,471

社区成员

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

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