我正在实现我自己建立在第三方等待函数Future
之上的thirdPartyWait(int milliseconds)
类。我希望Future
与std::future
的界面兼容,这意味着我想同时提供wait_for
和wait_until
。
wait_for
很简单,因为它直接映射到thirdPartyWait
(我可以处理其中的毫秒转换)。但是,wait_until
并没有很好地映射。直观地说,我认为以下应该做我想做的事情:
template <class Clock, class Duration>
std::future_status wait_until(const std::chrono::time_point<Clock, Duration> &timeout) const
{
return wait_for(timeout - Clock::now());
}
我已经对代码进行了测试并且可以正常运行,但我很清楚,简单的测试并未涵盖所有极端情况。我对chrono
的{{1}}部分不够熟悉,因此我的问题是:
我在std
的实施中是否存在任何隐藏的陷阱,或者我可以期望它按预期工作?
答案 0 :(得分:2)
cppreference有关于std::future::wait_until
:
使用与timeout_time相关的时钟,这不需要是单调时钟。如果时钟不连续调整,则无法保证此函数的行为,但现有实现将timeout_time从Clock转换为std :: chrono :: system_clock并委托给POSIX pthread_cond_timedwait,以便等待调用系统时钟,而不是用户提供的时钟。在任何情况下,由于调度或资源争用延迟,函数也可能等待超过达到timeout_time之后的时间。
我从中推断出当前的实现正如您正在做的那样。