令我驚訝的是,一個已經完成執行但尚未加入的C++ 11 std :: thread對象仍然是執行活動線程的considered。這在下面的代碼示例中說明(使用g ++ 4.7.3在Xubuntu 13.03上構建)。有誰知道C++ 11標準是否提供了一種方法來檢測std :: thread對象是否仍在運行代碼?C++ 11可以判斷std :: thread是否處於活動狀態?
#include <thread>
#include <chrono>
#include <iostream>
#include <pthread.h>
#include <functional>
int main() {
auto lambdaThread = std::thread([](){std::cout<<"Excuting lambda thread"<<std::endl;});
std::this_thread::sleep_for(std::chrono::milliseconds(250));
if(lambdaThread.joinable()) {
std::cout<<"Lambda thread has exited but is still joinable"<<std::endl;
lambdaThread.join();
}
return 0;
}
的可能重複的[C++ 11安全地加入一個線程不使用try/catch塊(http://stackoverflow.com/questions/15994650/c11-safely-join-a-thread-without -using-a-try-catch-block) –
'joinable'與線程是否正在執行無關。 –
這個鏈接的答案是不相關的,我想知道如何檢查一個線程是否仍然活動,而不是當它是安全的加入,bamboon的回答解決這個完美 –