如何Kill一个无响应的线程

seaking 2000-08-28 05:30:00
有一个多线程程序,其中有一个线程偶尔会无响应(是无响应,不是进入死循环),
我想在当该线程无响应时,在主线程中强制中断该线程,然后再重新开启该线程.
请问各为高手,我该怎样终止该线程?
感激不尽!!!!!!!!!!!!!!!
...全文
484 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffHe 2000-08-31
  • 打赏
  • 举报
回复
我曾经编过一个与单片机通讯的程序,也是开了一个子线程去通讯,其中有可能要在主程序里
down掉子线程,于是我用了在主程序里查询子线程的状态,然后强行down掉,我知道这样会有
memory leak 的可能, 可我不知道其他更好的方法了, 各位可以讨论一下吗 ?
Holly 2000-08-29
  • 打赏
  • 举报
回复
一般象这种情况完全可以用WaitforSingleObject来处理,将等待的时间设为一定的时间长度,超时则进行处理,不过通常也是需要两个子线程以避免影响主线程的运作(听起来你的程序像是一个服务器端程序或是与服务器通讯的Client端);
至于你所说的无响应的问题有可能是你所说的原因,你可以在程序中添加调试代码以测知代码在哪里被阻塞。(调试代码可以用写文本文件的方法);
Holly 2000-08-29
  • 打赏
  • 举报
回复
ppc207的方法更为高明一些!(我为何忘记这种做法)
但我还是想知道seaking是如何知道线程出现了无响应的情况?
ppc207 2000-08-29
  • 打赏
  • 举报
回复
对于多线程无响应的机会很小,那是在系统资源被浩光的情况之下,这是很危险的,系统容易崩溃
这可能是在编写程序时不注意释放资源,比如文件,内存等,所以才会使线程无响应,如真想这样就把线程挂起,然后再启动他,使用suspendThread\resumeThread.
playpcgame 2000-08-29
  • 打赏
  • 举报
回复
可以通过线程之间定时的互相通讯来判断线程是否有响应。我们的程序就是这么作的
seaking 2000-08-29
  • 打赏
  • 举报
回复
感谢各位的帮助,
我的程序目前还是单线程,但在运行时偶尔会无响应,即程序很长时间没有工作(若在工作,会把一些数据写入文本文件和数据库),最长时可运行两天半,最短时只运行了两个小时,程序停止时程序界面无法重显,整个系统cpu占用率很低(2%,3%),我无法判断是哪个地方出的问题,后来想到,若把程序改为多线程(两个线程),由一个线程完成原来的工作,由另一个线程对第一个线程进行监控,若发现第一个线程长时间没有工作,则通知主线程终止第一个线程,然后再开启,则可以避免无响应的问题,不知此方法是否可行,望各位高手告之。
另:我的程序中用到了访问Internet的函数(下载html页面),《Visual c++ 技术内幕6.0》中269页第六行中说到:“许多函数可以阻塞线程,特别是那些访问硬件设备或Internet主机的函数." 我在考虑,我的程序是否是这个原因造成的无响应呢? 望各位高手指点。
Holly 2000-08-29
  • 打赏
  • 举报
回复
learn:
你的方法是是用于进程的!请把Process替换为Thread!
learn 2000-08-29
  • 打赏
  • 举报
回复
你可以试着用如下方法:
1:首先获得该线程的标识(ID号)(在启动该线程时就获得它的ID号)
2:hProcess=OpenProcess(&H400, 0, ID号)
3:TerminateProcess hProcess, 3838

learn

Holly 2000-08-28
  • 打赏
  • 举报
回复
那你如何断定你的程序有这种情况的呢?
seaking 2000-08-28
  • 打赏
  • 举报
回复
非常感谢Holly给予的建议,不过我不知道无响应的状态是怎样产生的。
Holly 2000-08-28
  • 打赏
  • 举报
回复
如果你能够知道无响应的状态的产生,那么就在你知道的地方调用TerminateThread(HANDLE,DWORD)强行将线程终止,但有关该线程的内存和资源将没有机会释放,所以如果你的线程经常有这种情况,避免在这样的线程中使用内存分配和资源申请的动作,如果必须有,想办法将这种动作移到线程外处理;

15,472

社区成员

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

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