2017-02-14 117 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

相關問題