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


C++ std::thread::join()用法及代码示例


std::thread::join() 是 C++ 中的标准库函数,用于阻塞当前线程,直到 *this 标识的线程完成执行。这意味着它将在调用时保留当前线程,直到与 join() 函数关联的线程完成执行。

它在<thread>头文件中定义为线程的成员函数std::线程类。

std::thread::join( 的语法)

void join();

参数:

该方法不接受任何参数。

返回值:

该函数不返回值。

std::thread::join( 的示例)

下面的示例演示了如何使用 std::thread::join() 函数来加入线程。

// C++ program to illustrate
// std::thread::join() function in C++
#include <iostream>
#include <thread>
using namespace std;

void thread_function()
{
    for (int i = 0; i < 2; i++)
        cout << "Thread function Executing" << endl;
}

int main()
{
    thread threadObj(thread_function);

    for (int i = 0; i < 10; i++)
        cout << "Display From Main Thread" << endl;

    threadObj.join();
    cout << "Exit of Main function" << endl;
    return 0;
}


输出

Display From Main Thread
Display From Main Thread
Thread function Executing
Thread function Executing
Exit of Main function

要点:

  1. std::thread::join()函数阻塞当前线程,直到由*this完成其执行。如果线程已经执行完毕,那么join()立即返回。
  2. join()函数用于确保线程在程序退出之前已完成执行。如果join()在main函数完成之前没有调用,并且线程仍在执行,那么程序将突然终止。
  3. 一个线程只能加入一次,一旦加入,该线程就不可加入。如果您尝试多次加入线程,程序将终止。
  4. 如果你想让线程不可连接而不阻塞当前线程,你可以使用detach()函数而不是join()。不过,使用时一定要小心detach(),因为如果主线程在分离线程之前完成执行,程序将终止,并且分离线程使用的任何资源都不会被清理。

std::thread::joinable() 函数

线程必须是可连接的,join() 函数才能工作。我们可以使用以下命令检查线程是否可连接Thread joinable()std::thread 类的成员函数。

std::thread::joinable( 的示例)

// C++ program to illustrate
// std::thread::joinable() function in C++
#include <iostream>
#include <thread>
using namespace std;

// thread callable
void thread_function()
{
    for (int i = 0; i < 2; i++)
        cout << "Thread function Executing" << endl;
}

int main()
{
    // creating object of std::thread class
    thread threadObj(thread_function);

    for (int i = 0; i < 10; i++)
        cout << "Display From Main Thread" << endl;

    // detaching thread
    threadObj.detach();

    // checking if the thread is joinable.
    if (threadObj.joinable()) {
        threadObj.join();
        cout << "Thread is Joined" << endl;
    }
    else {
        cout << "Thread is not joinable." << endl;
    }

    cout << "Exit of Main function" << endl;

    return 0;
}


输出

Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Display From Main Thread
Thread is not joinable.
Exit of Main function




相关用法


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