#include<iostream>#include<thread>#include<chrono>usingnamespacestd::chrono_literals;voidfoo(){ std::this_thread::sleep_for(500ms); }intmain(){ std::cout << std::boolalpha; std::thread t; std::cout <<"before starting, joinable: "<< t.joinable() <<'\n'; t = std::thread{foo...
std::thread::joinable booljoinable()constnoexcept; (C++11 起) 检查std::thread对象是否标识活跃的执行线程。具体而言,若get_id()!=std::thread::id()则返回true。故默认构造的 thread 不可结合。 结束执行代码,但仍未结合的线程仍被当作活跃的执行线程,从而可结合。
bool joinable() const noexcept; (C++11 起) 检查std::thread 对象是否标识活跃的执行线程。具体而言,若 get_id() != std::thread::id() 则返回 true。故默认构造的 thread 不可合并。 结束执行代码,但仍未合并的线程仍被当作活跃的执行线程,从而是可合并的。 参数...
已经被join的std::thread。调用了join之后,std::thread就变成了unjoinable的状态。 已经被detach的std::thread。detach会断开std::thread和执行任务之间的连接。 之前的func中创建的thread,在销毁时是属于joinable状态的(不是默认构造,没有被移动,没有join和detach,并且线程还在运行),所以按照C++的标准,程序会被强行...
std::thread 对象已被移动走 已join的std::thread 对象 已detach的std::thread 对象 C++标准要求, 如果调用仍joinable()的线程的析构函数, 则终止整个程序的执行, 因为未join的线程可能导致非常棘手的情况. 鉴于以上信息, 假设我们有一个函数, 先进行一些过滤,然后在满足特定条件的情况下对过滤后的结果进行一些...
std::jthread::joinable [[nodiscard]]booljoinable()constnoexcept; (C++20 起) 检查std::jthread对象是否标识活跃的执行线程。具体而言,若get_id()!=std::jthread::id()则返回true。故默认构造的 jthread 不可结合。 结束执行代码,但仍未结合的线程仍被当作活跃的执行线程,从而可结合。
#include <iostream> #include <thread> #include <chrono> void foo() { std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { std::jthread t; std::cout << "before starting, joinable: " << std::boolalpha << t.joinable() << '\n'; t = std::thread(foo); ...
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....