2012-01-08 53 views
1

是下面的代码监视线程

if(ESRCH == pthread_kill(Thread_Id,0)) 
      start_Thread_Again 

一块很好的方法来检查,如果我的线程意外退出的状态?我们是否可以使用它类似于

wait(-1,W_NOHANG) 
+0

线程是分离的还是可以连接的? – 2012-01-09 08:06:34

+0

分离线程... – 2012-01-09 09:03:39

+1

然后代码是非法的。如果线程已终止,则它的线程ID不再有效。所以,不,这不是一个好方法。它会在线程ID为指针的平台上崩溃。 ;) – 2012-01-09 09:14:19

回答

4

“意外退出?”一个线程不会意外退出,因为你的代码告诉它会这样做,这意味着你有一个bug,如果你不希望它退出。

pthread_kill的手册页:“如在kill()中,如果sig为零,则应执行错误检查,但不应实际发送信号。”

你的代码是错误的,它必须检查是否相等。

2

很难确定,因为你的问题的背景有多少。但它表明一个人以完全不正确的方式思考线程。

没有理由一个典型的应用程序代码应该关心什么线程特别是在做什么。你可能会关心正在完成的一些工作的状态,但是这种关注应该在逻辑上独立于当时可能或不可能在做什么工作的线程。

如果您的问题是某些工作是否完成,或者某些任务是否正在进行,则查看与该工作或任务相关的结构。那些结构不会与特定的线程相关联,而是与需要完成的事情相关联。