}intmain(){ std::cout << std::boolalpha; std::thread t; std::cout <<"before starting, joinable: "<< t.joinable() <<'\n'; t = std::thread{foo}; std::cout <<"after starting, joinable: "<< t.joinable() <<'\n'; t.join(); std::cout <<"after joining, joinable: "...
bool joinable() const noexcept; (C++11 起) 检查std::thread 对象是否标识活跃的执行线程。具体而言,若 get_id() != std::thread::id() 则返回 true。故默认构造的 thread 不可合并。 结束执行代码,但仍未合并的线程仍被当作活跃的执行线程,从而是可合并的。 参数...
std::thread 对象已被移动走 已join的std::thread 对象 已detach的std::thread 对象 C++标准要求, 如果调用仍joinable()的线程的析构函数, 则终止整个程序的执行, 因为未join的线程可能导致非常棘手的情况. 鉴于以上信息, 假设我们有一个函数, 先进行一些过滤,然后在满足特定条件的情况下对过滤后的结果进行一些...
原因在于C++标准规定,std::thread的析构被调用时,std::thread必须是unjoinable的,否则std::terminate就会被调用。 std::thread有两种状态,joinable和unjoinable,unjoinable的std::thread包括: 使用默认构造的std::thread。这种std::thread没有任何执行任务。 被移动的std::thread。比如std::thread t2(std::move(...
std::thread::joinable booljoinable()constnoexcept; (C++11 起) 检查std::thread对象是否标识活跃的执行线程。具体而言,若get_id()!=std::thread::id()则返回true。故默认构造的 thread 不可结合。 结束执行代码,但仍未结合的线程仍被当作活跃的执行线程,从而可结合。
std::thread:: Create account std::thread::joinable booljoinable()constnoexcept; (since C++11) Checks if thestd::threadobject identifies an active thread of execution. Specifically, returnstrueifget_id()!=std::thread::id(). So a default constructedthreadis not joinable....