2017-02-14 118 views
1

我正在实施我自己的Future类,它建立在第三方等待功能thirdPartyWait(int milliseconds)之上。我想我的Future与接口兼容std::future,这意味着我想提供wait_forwait_until我可以使用now()将wait_until转换为wait_for吗?

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()); 
} 

我测试的代码和它的作品,但我清楚地知道一个简单的测试没有覆盖所有角落的情况。我不够熟悉stdchrono部分可以肯定的,因此我的问题:

是否有我的执行wait_until任何隐藏的陷阱,或者我可以期望它像预期的那样?

+1

如果'时钟:: rep'是无符号和'timeout'已经过去,会发生什么? –

回答

2

cppreference具有这样说std::future::wait_until

时钟绑timeout_time使用,不要求是单调clock.There是有关此功能的行为,如果时钟是没有保证但现有的实现将timeout_time从Clock转换为std :: chrono :: system_clock,并委托给POSIX pthread_cond_timedwait,以便等待系统时钟的调整,但不支持用户提供的时钟。在任何情况下,由于调度或资源争用延迟,该函数也可能等待比timeout_time之后的时间更长的时间。

从中我推断出当前的实现与您的操作完全相同。

http://en.cppreference.com/w/cpp/thread/future/wait_until

相关问题