令我惊讶的是,一个已经完成执行但尚未加入的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的回答解决这个完美 –