当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ Thread joinable()用法及代码示例


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分钟。



相关用法


注:本文由纯净天空筛选整理自Kushagra7744大神的英文原创作品 Thread joinable() function in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。