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
#include
#include
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++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。