是否有任何STL功能等待使用挂钟时间而不是"机器唤醒"时间?

时间:2015-05-08 23:19:44

标签: c++ stl

我正试图找到一种等待信号或最长持续时间的方法,使得持续时间是挂钟时间而不是机器醒着的时间。例如,对于以下事件顺序:

  1. 最多24小时调用wait()函数
  2. 12小时过关
  3. 机器处于睡眠状态
  4. 12小时过关
  5. 机器从睡梦中醒来
  6. 我希望wait()调用一旦进程运行就会立即返回,因为24小时的挂钟时间已经过去了。我尝试过使用std :: condition_variable :: wait_until但是使用了机器清醒时间。我也试过Windows上的WaitForSingleObject()和mac上的pthread_cond_timedwait()无济于事。如果可能的话,我更喜欢跨平台的东西(例如在STL中)。作为备份,它看起来像Windows的SetThreadpoolTimer()和mac上的dispatch_after()(使用dispatch_walltime())可以工作,但我当然更喜欢单个实现。有人知道吗?

    谢谢!

    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        condition_variable cv;
        mutex m;
        unique_lock<mutex> lock(m);
        auto start = chrono::steady_clock::now();
        cv_status result = cv.wait_until(lock, start + chrono::minutes(5));
        //put computer to sleep here for 5 minutes, should wake up immediately
        if (result == cv_status::timeout)
        {
            auto end = chrono::steady_clock::now();
            chrono::duration<double> diff = end - start;
            cerr << "wait duration: " << diff.count() << " seconds\n";
        }
    
        return 0;
    }
    

0 个答案:

没有答案