守护线程如何写?(100分)

  • 主题发起人 主题发起人 Supermay
  • 开始时间 开始时间
S

Supermay

Unregistered / Unconfirmed
GUEST, unregistred user!
守护线程如何写?
需求:有N个线程,如何写一个守护线程,若前面N个线程出错并中止后,如何使用守护线程重新启动第i(i不大于N)个线程
如何才能知道线程异常中止?
 
这个需要从框架上做好规划,因为你的其他的线程和守护线程之间要有一个统一的通信机制,线程要告诉守护线程自己正常运行。就比如说,qq这种聊天一样,服务器就是一个守护线程,而其他的客户端就是你的多线程,那么客户端和服务器之间,就有一个定时检测的机制,客户端告诉服务器自己在线。所以,你要做到你所需要的,就必须解决这个问题。
 
把所有线程加载到List中,守护线程定时循环判断每个Item的状态。如果停止的话再启动
 
但某一线程的运行参数并不知道,如何重启
 
来自:就此开始, 时间:2008-8-2 10:47:14, ID:3911817
把所有线程加载到List中,守护线程定时循环判断每个Item的状态。如果停止的话再启动
线程结束了就释放了,你如何启动呢?
来自:Supermay, 时间:2008-8-2 20:30:40, ID:3911886
但某一线程的运行参数并不知道,如何重启
那你这个就没有办法了哦,连参数都不知道,如何启动。
 
用delphi的线程类啊,不要设置为线程结束后自动释放。这样线程结束运行了,线程类实例还在的。线程创建时传入的参数保存在一个类的私有变量内即可。
然后启动线程后,就用内核事件等待函数来等待线程结束,不过这个方法不适合一个线程监控多个线程,因为等待函数是阻塞的。
一对多监控,你可以在监视线程内用一个循环扫描每个线程
if GetExitCodeThread(线程id,VarExitCode) <> STILL_ACTIVE then
线程挂了
然后用保存的线程实例重新运行线程即可。保证参数一致。
 
多人接受答案了。
 
后退
顶部