我正在使用boost::asio::deadline_timer,以便在TCP套接字上的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<milliseconds>(2s).count());
还是不好。但这是您的 key 。
最新消息
在任何c++ 11或更高版本的场景中,
#include <boost/asio/high_resolution_timer.hpp>
并享受一个从下到上完全在
std::chrono
上参数化的计时器。没有更多的阻抗失配:Live On Coliru
#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;