我有一个使用asio截止时间计时器的应用程序.应用程序的其余部分使用std::chrono构造作为其时间值,并且boost::posix_time仅用于触及asio的东西感觉很尴尬.std::chrono如果可以的话,我想在整个应用程序中使用,以保持一致性,可读性等.
在我看来,答案将涉及使用计时器的模板:
typedef boost::asio::basic_deadline_timer<std::chrono::system_clock::time_point>
my_deadline_timer_type;
my_deadline_timer_type a_timer(io_service);
Run Code Online (Sandbox Code Playgroud)
除了在编译时严重爆炸......许多错误行,其中大部分与此类似:
/opt/arm/include/boost/asio/deadline_timer_service.hpp:51:43:错误:无效使用不完整类型'boost :: asio :: deadline_timer_service >>,boost :: asio :: time_traits >>>> :: traits_type {aka struct boost :: asio :: time_traits> >>}'
所以,看起来我可能需要创建一个新的traits_type并声明deadline_timer_service使用它,但我不确定如何/在哪里.我不得不相信这个问题已经解决了.我在linux上使用g ++ 4.7.3和-std = c ++ 11,交叉编译到arm.
Dav*_*e S 26
如果你使用的是boost 1.49或更高版本,ASIO引入了basic_waitable_timer,它使用来自std::chrono或的C++ 11兼容时钟boost::chrono.他们还提供预先定义的typedef为的提升版本steady_clock,system_clock和high_resolution_clock.它的功能与之相同deadline_timer,但使用的是C++ 11时钟机制而不是boost::posix_time结构.
对于早期版本,您将不得不传递特征结构来处理转换为期望的类型deadline_timer.请参阅ASIO TimeTraits要求.大多数都是微不足道的,最后一个不是.所以,例如
template<typename Clock>
struct CXX11Traits
{
typedef typename Clock::time_point time_type;
typedef typename Clock::duration duration_type;
static time_type now()
{
return Clock::now();
}
static time_type add(time_type t, duration_type d)
{
return t + d;
}
static duration subtract(time_type t1, time_type t2)
{
return t1-t2;
}
static bool less_than(time_type t1, time_type t2)
{
return t1 < t2;
}
static boost::posix_time::time_duration
to_posix_duration(duration_type d1)
{
using std::chrono::duration_cast;
auto in_sec = duration_cast<std::chrono::seconds>(d1);
auto in_usec = duration_cast<std::chrono::microseconds>(d1 - in_sec);
boost::posix_time::time_duration result =
boost::posix_time::seconds(in_sec.count()) +
boost::posix_time::microseconds(in_usec.count());
return result;
}
};
Run Code Online (Sandbox Code Playgroud)
然后,您将为要使用的每个C++ 11时钟创建截止时间计时器.这里的例子是为了std::system_clock.您可以正常使用此截止日期计时器.
typedef boost::asio::basic_deadline_timer<
std::system_clock,
CXX11Traits<std::system_clock>> my_system_clock_deadline_timer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6735 次 |
| 最近记录: |