如何終止 C++11 中的執行緒?


在這裡,我們將學習如何在 C++11 中終止執行緒。C++11 沒有終止執行緒的直接方法。

可以使用 std::future<void> 進行執行緒,並且當 Future 中的值可用時,它應該退出。如果我們想向執行緒傳送訊號,但不傳送實際的值,我們可以傳遞 void 型別物件。

要建立一個 promise 物件,我們必須遵循以下語法 −

std::promise<void> exitSignal;

現在從這個建立的 promise 物件中獲取關聯的 future 物件 −

std::future<void> futureObj = exitSignal.get_future();

現在在建立執行緒時傳遞主函式,傳遞 future 物件 −

std::thread th(&threadFunction, std::move(futureObj));

示例

#include <thread>
#include <iostream>
#include <assert.h>
#include <chrono>
#include <future>
using namespace std;
void threadFunction(std::future<void> future){
   std::cout << "Starting the thread" << std::endl;
   while (future.wait_for(std::chrono::milliseconds(1)) == std::future_status::timeout){
      std::cout << "Executing the thread....." << std::endl;
      std::this_thread::sleep_for(std::chrono::milliseconds(500)); //wait for 500 milliseconds
   }
   std::cout << "Thread Terminated" << std::endl;
}
main(){
   std::promise<void> signal_exit; //create promise object
   std::future<void> future = signal_exit.get_future();//create future objects
   std::thread my_thread(&threadFunction, std::move(future)); //start thread, and move future
   std::this_thread::sleep_for(std::chrono::seconds(7)); //wait for 7 seconds
   std::cout << "Threads will be stopped soon...." << std::endl;
   signal_exit.set_value(); //set value into promise
   my_thread.join(); //join the thread with the main thread
   std::cout << "Doing task in main function" << std::endl;
}

輸出

Starting the thread
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Threads will be stopped soon....
Thread Terminated
Doing task in main function

更新時間:30-Jul-2019

6K+ 次瀏覽

開啟你的職業生涯 生涯

透過完成課程獲得認證

開始吧
廣告