c++ - 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`

标签 c++ c++11 boost boost-asio c++-chrono

我正在像这样使用 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 上完全参数化的计时器从下到上。不再有阻抗失配:

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;

关于c++ - 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563212/

相关文章:

c++ - ->std::ostream& 是什么意思?

c++ - 为什么 std::sort 提示删除的复制构造函数?

c++ - 多次下标 std::array 如何工作?

multithreading - 为什么在成员函数上调用std::thread时需要 'this'?

C++ 二进制表达式的无效操作数

c++ - 在opengl中旋转时闪烁

c++ - 错误 C4430 : missing type specifier/error C2143: syntax error : missing ';' before '*'

c++ - boost序列化实际上是如何保存const对象的

c++ - 在现有数据结构上使用BGL算法(作为 vector <Object *>的边和顶点)需要什么?

c++ - Boost Chrono Header Only 与 Linked