我正试图找到一种等待信号或最长持续时间的方法,使得持续时间是挂钟时间而不是机器醒着的时间。例如,对于以下事件顺序:
我希望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;
}