C 11 執行緒的暫停和繼續和停止

2021-10-04 02:21:37 字數 928 閱讀 1971

c++11 提供了執行緒(std::thead,std::async等)以及執行緒安全等控制(如std::unique_lock std::lock_guard, std::condition_variable等),我們目前假定執行乙個任務:任務的粒度是當前執行緒睡眠1秒,並輸出當前進度。我們將任務執行實現在testthread中的void runprocess(),並在該類提供 暫停(void pause())、恢復(void resume())、停止(void stop())的功能。

暫停和停止的功能主要是通過條件變數std::condition_variable和互斥變數std::mutex來實現

在每一次迴圈中檢查std::condition_variable::wait是否阻塞。第二個引數則是當返回true才不會阻塞當前執行緒

void testthread::

runprocess()

);}else}}

);testthread.

detach()

;}

當需要暫停時,我們將m_ispause設定為true,再通過std::condition_variable::notify_one通知mutex,從而阻塞當前執行緒同理,要解除阻塞的執行緒,則將m_ispause設定為false,再通知mutex,停止則比較好理解,即退出執行緒,這裡需要說一下,執行緒的退出一般是通過執行緒的自然死亡來退出執行緒,即設立標誌位(m_isstop)

void testthread::

pause()

void testthread::

resume()

void testthread::

stop()

呼叫main函式如下

int

main()

}}

執行緒暫停和繼續實現

開啟乙個子執行緒來顯示發動機上的執行時間,如果發動機暫停執行,那麼這個執行緒也會暫停,發動機又開動的時候,執行緒繼續開啟,資料也是連貫著的 timer timer newtimer timertask task newtimertask timer.schedule task,0 這樣的用法只能停止...

Java 實現執行緒的暫停和繼續

前言 這幾天的專案中,客戶給了個需求,希望我可以開啟乙個任務,想什麼時候暫停就什麼時候暫停,想什麼時候開始就什麼時候開始!所以這幾天惡補了一下執行緒中的方法,記錄一下,並給大家分享一下 正文自定義執行緒類 mythread import android.util.log public class m...

C 如何實現乙個執行緒暫停和繼續

using system using system.text using system.windows.forms using system.threading private void button1 click object sender,eventargs e private void tex...