C++ 如何将'std::chrono::millizes'转换为'boost::posix_time::millizes'`
我在tcp套接字上使用boost::asio::deadline\u计时器设置C++ 如何将'std::chrono::millizes'转换为'boost::posix_time::millizes'`,c++,c++11,boost,boost-asio,chrono,C++,C++11,Boost,Boost Asio,Chrono,我在tcp套接字上使用boost::asio::deadline\u计时器设置async\u read操作之前的超时时间。我使用的是boost 1.61 问题: 我的代码的其他部分使用的是std::chrono::ms。我希望使用std::chrono而不是的“长时间超时”&如果可能的话,使用std::chrono::毫秒而不是boost::posix\u time::毫秒。我该怎么做 问题: 那么,我如何在这里使用std::chrono::millides?有没有一种方法可以从std::chr
async\u read
操作之前的超时时间。我使用的是boost 1.61
问题:我的代码的其他部分使用的是
std::chrono::ms
。我希望使用std::chrono
而不是的“长时间超时”
&如果可能的话,使用std::chrono::毫秒
而不是boost::posix\u time::毫秒
。我该怎么做
问题:那么,我如何在这里使用
std::chrono::millides
?有没有一种方法可以从std::chrono::millides
转换为boost::posix_time::millides
?直接解决方案:duration\u cast
:
请注意,这将改变您的
long time_out_millis = 2000;
变成
Clock::duration timeout = 2000ms;
谢谢你这么详细的回答。你是说
Clock::duration
还是std::chrono::system\u Clock::duration
?你的答案很好。我明白了,但不确定你所说的Clock::duration timeout=2000ms是什么意思代码>。那是不可编译的。尝试使用std::chrono::system_clock::duration timeout=2000ms
会产生一些与持续时间相关的编译错误clock
在直接解决方案中,将是std::chrono::high_resolution_clock
的类型定义,而不应是毫秒
<代码>boost::posix_time::毫秒(持续时间_cast(2s).count())代码>@Quokka我想是的。干杯虽然这些天我会写duration/1s
或者我认为是duration/1.0ms
等等,
#include <boost/asio/high_resolution_timer.hpp>
#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;