Thread::joinable是C++ std::thread中的内置函数。它是一个观察器函数,表示它观察状态,然后返回相应的输出并检查线程对象是否可连接。
如果线程对象标识/表示执行中的活动线程,则称该线程对象是可连接的。
在以下情况下,线程不可联接:
- 它是默认构造的
- 如果其成员join或detach中的任何一个已被调用
- 它已移至其他地方
用法:
std::thread::joinable()
参数:该函数不接受任何参数。
返回值:这是一个布尔型函数,当线程对象为
可加入的。如果线程对象不可连接,则返回false。
以下程序演示了std::thread::joinable(的用法
注意:在在线IDE上,该程序将显示错误。要对此进行编译,请借助命令“ g ++ -std = c ++ 14 -pthread file.cpp”在g ++编译器编译中使用标志“-pthread”。
// C++ program to demonstrate the use of
// std::thread::joinable()
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
// function to put thread to sleep
void threadFunc()
{
std::this_thread::sleep_for(
std::chrono::seconds(1));
}
int main()
{
std::thread t1; // declaring the thread
cout << "t1 joinable when default created? \n";
// checking if it is joinable
if (t1.joinable())
cout << "YES\n";
else
cout << "NO\n";
// calling the function threadFunc
// to put thread to sleep
t1 = std::thread(threadFunc);
cout << "t1 joinable when put to sleep? \n";
// checking if t1 is joinable
if (t1.joinable())
cout << "YES\n";
else
cout << "NO\n";
// joining t1
t1.join();
// checking joinablity of t1 after calling join()
cout << "t1 joinable after join is called? \n";
if (t1.joinable())
cout << "YES\n";
else
cout << "NO\n";
return 0;
}
输出:
t1 joinable when default created? NO t1 joinable when put to sleep? YES t1 joinable after join is called? NO
注意:第三个输出将在1秒钟后出现,因为该线程已进入睡眠状态1分钟。
相关用法
- C++ Thread hardware_concurrency()用法及代码示例
- C++ Thread get_id()用法及代码示例
- C++ fma()用法及代码示例
- C++ log()用法及代码示例
- C++ div()用法及代码示例
- C++ ios eof()用法及代码示例
- C++ map key_comp()用法及代码示例
- C++ ios bad()用法及代码示例
- C++ regex_iterator()用法及代码示例
注:本文由纯净天空筛选整理自Kushagra7744大神的英文原创作品 Thread joinable() function in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。