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
要點:
- 這
std::thread::join()
函數阻塞當前線程,直到由*this
完成其執行。如果線程已經執行完畢,那麽join()
立即返回。 - 這
join()
函數用於確保線程在程序退出之前已完成執行。如果join()
在main函數完成之前沒有調用,並且線程仍在執行,那麽程序將突然終止。 - 一個線程隻能加入一次,一旦加入,該線程就不可加入。如果您嘗試多次加入線程,程序將終止。
- 如果你想讓線程不可連接而不阻塞當前線程,你可以使用
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
相關用法
- C++ std::to_string用法及代碼示例
- C++ std::to_wstring用法及代碼示例
- C++ std::to_address用法及代碼示例
- C++ std::accumulate()用法及代碼示例
- C++ std::binary_search()用法及代碼示例
- C++ std::copy()用法及代碼示例
- C++ std::copy_if()用法及代碼示例
- C++ std::copy_n()用法及代碼示例
- C++ std::fill()用法及代碼示例
- C++ std::fill_n()用法及代碼示例
- C++ std::find()用法及代碼示例
- C++ std::find_first_of()用法及代碼示例
- C++ std::for_each()用法及代碼示例
- C++ std::lower_bound()用法及代碼示例
- C++ std::max()用法及代碼示例
- C++ std::max_element()用法及代碼示例
- C++ std::min()用法及代碼示例
- C++ std::min_element()用法及代碼示例
- C++ std::minmax()用法及代碼示例
- C++ std::next_permutation()用法及代碼示例
- C++ std::nth_element()用法及代碼示例
- C++ std::replace()用法及代碼示例
- C++ std::replace_copy()用法及代碼示例
- C++ std::replace_copy_if()用法及代碼示例
- C++ std::replace_if()用法及代碼示例
注:本文由純淨天空篩選整理自subramanyasmgm大神的英文原創作品 std::thread::join() in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。