首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个线程怎样杀死另一个线程(C++)急解决方案

2012-02-06 
一个线程怎样杀死另一个线程(C++)急!!!!我应用里有两个线程,一个是任务线程;另一个是监控任务线程运行情况

一个线程怎样杀死另一个线程(C++)急!!!!
我应用里有两个线程,一个是任务线程;另一个是监控任务线程运行情况的监控线程,当任务线程在调用某个function   时长时间不返回(调用函数前加锁,函数返回后解锁),监控线程就要杀死这个任务线程,然后解锁,并重新creat   一个任务线程来执行这个函数,但是这时出现应用被系统kill掉了。请问怎么杀死原来的任务线程

[解决办法]
BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);

[解决办法]
从外部杀死唯一可以做到的就是TerminateThread
但是如果你有其他选择,永远不要用它
线程结束永远是它自己自杀比较好
如果一个函数长时间不返回,最好的办法是换成一种可中断的函数,也就是你可以让它提前返回

例如:一个函数如果有长时间工作的需求,那么每隔一定时间就应该去检查系统是否需要提前它结束
[解决办法]
给一种方案
1.业务监控线程(A Thr)对业务线程(B Thr)的这种监视,可以利用HeartBeat机制;具体的说就是A定期向B发送消息HeartBeat(可以考虑用msg queue,消息类型自己定义),如果在固定时间里面没有B回HeartBeat Ack,则在A中将其记录下来,在这种没有响应的计数达到你自己规定的门限值(可以是1)的时候,使用pthread_kill(),你可以用一个global 变量保存B的thread ID,或者B由A来创建,自然也就知道了B的Thr ID;
2.如果你的App被OS Kill掉,它创建的一些线程会被init进程收编成孩子;可以考虑在App创建起A,A创建了B后,定义一些signal的响应函数,在这些函数中,定义如果App收了kill这些信号的时候,把A/B干掉,这个你自己选择处理方式;
[解决办法]
做一个全局变量(bool),当一个线程操作改变这个共享变量。在另外线程中中自动检测改值是否发生变动。如果变动就让线程自己结束。(安全可靠的一种方案)

热点排行