我正在像这样使用 boost::asio::deadline_timer 在 tcp socket 上的 async_read
操作之前设置一些超时。我正在使用 boost 1.61。
long time_out_millis = 2000;
boost::asio::deadline_timer theTimer(theSocket.get_io_service(), boost::posix_time::milliseconds(time_out_millis));
问题:
我代码的其他部分使用 std::chrono::milliseconds
。我想使用 std::chrono
而不是 "long time_out_millis"
& 如果可能的话使用 std::chrono::milliseconds
而不是 boost::posix_time::milliseconds
。我该怎么做?
问题:
那么,如何在这里使用 std::chrono::milliseconds
呢?有没有一种方法可以将 std::chrono::milliseconds
转换为 boost::posix_time::milliseconds
?
最佳答案
直接解决:duration_cast<>
:
using namespace std::chrono;
using namespace std::chrono_literals;
boost::posix_time::seconds(duration_cast<seconds>(2s).count());
还是不好看。但这是你的 key 。
好消息
在任何 c++11 或更高版本的场景中,只需
#include <boost/asio/high_resolution_timer.hpp>
并享受在 std::chrono
上完全参数化的计时器从下到上。不再有阻抗失配:
#include <boost/asio/high_resolution_timer.hpp>
using namespace std::chrono_literals;
int main() {
boost::asio::io_service svc;
boost::asio::high_resolution_timer tim(svc);
tim.expires_from_now(1s);
tim.expires_from_now(100ms);
tim.expires_from_now(3h);
tim.expires_from_now(15'000us);
tim.expires_from_now(15'000'000ns);
}
注意这会改变你的
long time_out_millis = 2000;
变成类似的东西
Clock::duration timeout = 2000ms;
关于c++ - 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563212/