2012-11-13 24 views
1

我需要一種方法來知道我正在運行的線程是否完成。如果未完成,則等待,如果完成,則打印成功的消息。檢查線程是否在C++ 11中完成?

我從庫線程找不到在C++ 11中的方法或類似的東西。 我無法設置全局變量,因爲我正在使用execvp內部線程,並且如果成功則不會返回。

有沒有辦法做到這一點?方法或標誌或其他任何東西。

Edit:爲了說清楚我想寫一個函數來檢查線程是否完成。

+1

也許'加入'做你想要的?另外,不會execvp替換你的*整個*進程? –

+0

這沒有幫助,我需要像'while(線程未完成){1;} cout <<「線程完成」<< endl;' –

+5

這就是'join'的作用(除了它不會浪費處理器時間什麼都不做)... –

回答

6

您可以使用C++11 futures and promises

期貨是在線程之間傳遞的值高級別機制,並允許一個線程等待結果可用,而無需直接管理的鎖。

在使用普通螺紋期貨的好處是:

  • 未來返回一個值。
  • 您可以等待將來的超時。

當然,這可以用純線程完成,但爲什麼用C++ 11重新實現一個輪子。

+0

我想寫一個像is_finished(thread)這樣的函數。 –

+3

用0超時調用[std :: future :: wait_until()](http://en.cppreference.com/w/cpp/thread/future/wait_until)。 –

相關問題