2015-11-26 114 views
1

有沒有方法可以確定線程是否仍在運行?有幾個原因,我不能使用std::futurestd::async檢查std :: thread是否仍在運行

我想到某種join超時,例如:嘗試加入一個線程3秒鐘,如果成功,則認爲線程已完成,否則認爲線程正在運行。

+0

我想你想'joinable'。查閱文檔:http://www.cplusplus.com/reference/thread/thread/joinable/ –

+1

如果線程調用的函數對象在您的控制之下,最簡單的選擇是設置一個與'std相關的標誌::線程完成時。檢查線程是否仍然活着只會檢查標誌的當前狀態。 – user4815162342

+0

但是'joinable'只會告訴我線程是否可以連接。即使線程已經完成執行。或者我錯了? – Nidhoegger

回答

2

最接近你可以得到的是std::thread::joinable()。引用來自:

檢查線程對象是否標識活動的執行線程。具體而言,如果get_id() != std::thread::id()返回true。所以默認構建的thread不可連接。
已完成執行代碼但尚未加入的線程仍被視爲活動執行線程,因此可加入。

+2

這將無法可靠地工作,因爲執行完成但尚未分離或加入的'std :: thread'仍然可以連接。你甚至引用了這個事實。 – sigy