我可以使用 now() 将wait_until转换为wait_for吗?
Can I convert wait_until to wait_for using now()?
我正在实现我自己的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());
}
我已经测试了代码并且它有效,但我知道简单的测试并不能涵盖所有极端情况。我对std
的chrono
部分不够熟悉,因此我的问题:
在实现wait_until
时是否有任何隐藏的陷阱,或者我可以期望它按预期工作吗?
cppPreferences对std::future::wait_until
有这样的说法:
使用与timeout_time相连的时钟,不需要是单调时钟。如果时钟不连续调整,则无法保证此函数的行为,但现有实现将timeout_time从时钟转换为 std::chrono::system_clock 并委托给 POSIX pthread_cond_timedwait,以便等待遵循系统时钟,而不是用户提供的时钟。在任何情况下,由于计划或资源争用延迟,该功能也可能会等待更长的时间,直到达到timeout_time。
从中我推断当前的实现与您正在做的完全一样。
http://en.cppreference.com/w/cpp/thread/future/wait_until
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- std::condition_variable::wait()如何评估给定的谓词
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- C++11 无法将 std::condition_variable::wait 从 'void' 转换为 'bool'