社区
进程/线程/DLL
帖子详情
如何Kill一个无响应的线程
seaking
2000-08-28 05:30:00
有一个多线程程序,其中有一个线程偶尔会无响应(是无响应,不是进入死循环),
我想在当该线程无响应时,在主线程中强制中断该线程,然后再重新开启该线程.
请问各为高手,我该怎样终止该线程?
感激不尽!!!!!!!!!!!!!!!
...全文
484
11
打赏
收藏
如何Kill一个无响应的线程
有一个多线程程序,其中有一个线程偶尔会无响应(是无响应,不是进入死循环), 我想在当该线程无响应时,在主线程中强制中断该线程,然后再重新开启该线程. 请问各为高手,我该怎样终止该线程? 感激不尽!!!!!!!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)强行将线程终止,但有关该线程的内存和资源将没有机会释放,所以如果你的线程经常有这种情况,避免在这样的线程中使用内存分配和资源申请的动作,如果必须有,想办法将这种动作移到线程外处理;
java
kill
线程
_如何优雅的
kill
线程
kill
掉
一个
线程
,感觉是一件很简单的事情,比如 JAVA 中为我们提供了 stop 方法可以立即终止
线程
的执行,达到
kill
掉
线程
的目的。但实际上对
线程
的操作是一件精细活,对于一段正在执行的任务,我们不能只是简单粗暴的勒令其停止。原因就是,
线程
与资源是有关联的。比如,
一个
线程
持有某个 lock ,我们在
线程
释放 lock 前粗暴的停止了它的运行,那么可能导致其持有的 lock 永远不能被释...
杀掉
线程
kill
-9和
kill
-15的区别
在部署tomcat,有时候使用shutdown.sh关闭
线程
会失败,很多人都会使用的套路: ps -ef|grep java
kill
-9 pid 或者
kill
-15 pid ps -ef|grep tomcat
kill
-9 pid 或者
kill
-15 pid 现在来了解一下这个
kill
命令。 1)
kill
从help中可以清晰的看到 -n 指的是信号编号,那问题来了,“信号编号”是哪位大神??? 2)
kill
-l(查看Linux/Unix的信号变量) 这么多呀!!.
线程
,进程与信号
当
一个
进程有多个
线程
的时候,通过
kill
命令来给某个进程发送信号的时候,那到底是谁来
响应
这个信号呢?一定是主
线程
么? 同时,还要知道信号是可以打断一些阻塞函数的(accept,read ...) 实验: 首先我们使用sigaction函数来注册
一个
信号处理函数,来
响应
SIGTERM信号,然后我们创建
一个
线程
,创建
线程
完毕后,我们在主
线程
中,使用pthread_sigmask函数来屏蔽SIGTERM信号。当程序跑起来后,我们使用
kill
命令来向进程发
一个
SIGTERM信号,查看是否是子
线程
来..
Linux 多
线程
开发-
线程
的结束pthread_
kill
和pthread_cancel
1、
线程
结束的方式 (1)
线程
函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)
线程
所属的进程结束,进程调用exit,
线程
C++对象不会销毁,不安全,属于被动结束 (3)
线程
函数执行返回return,好的退出方式 (4)
线程
被同一进程或其他
线程
通知结束,属于被动结束 2、
线程
主动结束
线程
主动结束使用return或者pthread_exit函数,原型如下: v...
python
线程
超时
kill
,一段时间后杀死
线程
的大多数Python方法
小编典典在这种情况下,使用事件作为信号传递机制就可以了,实际上在
线程
模块docs中建议使用。如果您希望
线程
正常停止,请使其成为非守护进程,并使用适当的信号传递机制,例如Event。验证
线程
终止时,超时几乎总是会引入错误空间。因此,虽然将.join()with超时用于触发事件的初始决策是可以的,但最终验证应使用.join()没有超时的a进行。# wait 30 seconds for the thr...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章