令我惊讶的是,一个已经完成执行但尚未加入的C++ 11 std :: thread对象仍然被认为是一个活动的执行线程.下面的代码示例(在Xubuntu 13.03上使用g ++ 4.7.3构建)说明了这一点.有谁知道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;
}
Run Code Online (Sandbox Code Playgroud)