我正在使用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;

10-02 06:52