2012-01-08 80 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

很難確定,因爲你的問題的背景有多少。但它表明一個人以完全不正確的方式思考線程。

沒有理由一個典型的應用程序代碼應該關心什麼線程特別是在做什麼。你可能會關心正在完成的一些工作的狀態,但是這種關注應該在邏輯上獨立於當時可能或不可能在做什麼工作的線程。

如果您的問題是某些工作是否完成,或者某些任務是否正在進行,則查看與該工作或任務相關的結構。那些結構不會與特定的線程相關聯,而是與需要完成的事情相關聯。