有沒有方法可以確定線程是否仍在運行?有幾個原因,我不能使用std::future
和std::async
。檢查std :: thread是否仍在運行
我想到某種join
超時,例如:嘗試加入一個線程3秒鐘,如果成功,則認爲線程已完成,否則認爲線程正在運行。
有沒有方法可以確定線程是否仍在運行?有幾個原因,我不能使用std::future
和std::async
。檢查std :: thread是否仍在運行
我想到某種join
超時,例如:嘗試加入一個線程3秒鐘,如果成功,則認爲線程已完成,否則認爲線程正在運行。
最接近你可以得到的是std::thread::joinable()
。引用來自:
檢查線程對象是否標識活動的執行線程。具體而言,如果
get_id() != std::thread::id()
返回true
。所以默認構建的thread
不可連接。
已完成執行代碼但尚未加入的線程仍被視爲活動執行線程,因此可加入。
這將無法可靠地工作,因爲執行完成但尚未分離或加入的'std :: thread'仍然可以連接。你甚至引用了這個事實。 – sigy
我想你想'joinable'。查閱文檔:http://www.cplusplus.com/reference/thread/thread/joinable/ –
如果線程調用的函數對象在您的控制之下,最簡單的選擇是設置一個與'std相關的標誌::線程完成時。檢查線程是否仍然活着只會檢查標誌的當前狀態。 – user4815162342
但是'joinable'只會告訴我線程是否可以連接。即使線程已經完成執行。或者我錯了? – Nidhoegger