當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。