C++11 條件變數及時間點的使用
阿新 • • 發佈:2021-01-07
#ifndef DOMAIN_H #define DOMAIN_H #include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <atomic> class DoMain { public: DoMain(); ~DoMain(); void threadTimerHandle(); private: std::mutex m_mtx; std::condition_variable m_cv; public: std::atomic<bool> m_ready; }; #endif // DOMAIN_H
#include "domain.h" DoMain::DoMain() { m_ready = false; //已經呼叫了login,在這裡等待 //std::thread t = std::thread(&DoMain::handleThread, this); std::thread t1 = std::thread(&DoMain::threadTimerHandle, this); std::unique_lock<std::mutex> lk(m_mtx); //auto time = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count(); //時間點的使用 auto now = std::chrono::system_clock::now(); auto toTime = now + std::chrono::seconds(5); //阻塞在這裡,直到被喚醒 m_cv.wait_until(lk, toTime); lk.unlock(); if(t1.joinable()) t1.join(); std::cout << "DoMain finish\n" << std::endl; } DoMain::~DoMain() { } //定時器執行緒:睡5秒後,條件變數喚醒 void DoMain::threadTimerHandle() { std::this_thread::sleep_for(std::chrono::seconds(5)); std::cout << "threadTimerHandle\n" << std::endl; m_cv.notify_all(); m_ready = true; }
更多時間相關的: