- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个使用 asio 截止时间计时器的应用程序。应用程序的其余部分使用 std::chrono
构造作为其时间值,并且仅对涉及 asio 的内容使用 boost::posix_time
感觉很尴尬。如果可以的话,我想在整个应用程序中使用 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);
除了这在编译时严重崩溃...许多错误行,其中大部分与此类似:
/opt/arm/include/boost/asio/deadline_timer_service.hpp:51:43: error: invalid use of incomplete type 'boost::asio::deadline_timer_service > >, boost::asio::time_traits > > > >::traits_type {aka struct boost::asio::time_traits > > >}'
所以,看起来我可能需要创建一个新的 traits_type
并使用它声明一个 deadline_timer_service
,但我不确定如何/在哪里。我必须相信这个问题已经解决了。我在 linux 上使用带有 -std=c++11 的 g++ 4.7.3,交叉编译到 arm。
最佳答案
如果您使用 boost 1.49 或更高版本,ASIO 引入了 basic_waitable_timer ,它使用来自 std::chrono
或 boost::chrono
的 C++11 兼容时钟。他们还为 steady_clock
、system_clock
和 high_resolution_clock
的 boost 版本提供了预定义的 typedef。它的功能与 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;
}
};
然后,您将为要使用的每个 C++11 时钟创建截止时间计时器。此处的示例适用于 std::system_clock
。您可以正常使用此截止时间计时器。
typedef boost::asio::basic_deadline_timer<
std::system_clock,
CXX11Traits<std::system_clock>> my_system_clock_deadline_timer
关于c++ - boost::asio::deadline_timer 与 std::chrono 时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721243/
我正在研究基于 boost 1.52 的 boost::asio::deadline_timer 的实现。 如 the article on highscore 中所述,它分三部分实现: deadli
我需要在两个线程之间共享一个 boost::deadline_timer。 boost 文档说“共享实例不是线程安全的”。这是一个示例代码: ClassA : public enable_shared
我有点迷失在库的构造中,我必须将它们纠缠在一起。我需要帮助将一些计时器引入到这个结构中。 我有以下内容: com.cpp 具有 main 并包含 com.hpp com.hpp 包含一个 host.h
我已经为 boost::asio 实现了一个非常标准的阻塞 api 模拟和超时。这是我的主要周期: io_service io_svc; tcp::endpoint endpoint(tcp::v4(
我有一个这样的测试类。我想要做的是继续运行这个对象中的三个计时器。但是在我实例化一个对象之后,一些计时器会一直重复,但其他计时器会在 3 分钟后消失。谁能给我解释一下? class EventProc
调用 deadline_timer::wait 是否会导致 io_service 中的其他任务在等待时执行,或者如果在其中调用它是否会完全阻塞 io 线程? io_service service; i
我正在使用一个 boost deadline_timer,它似乎在拥有的对象被删除后调用它的处理程序。我已经尝试了几种方法来让它发挥作用。 首先,我只是通过绑定(bind)到处理程序和使用“share
在阅读了 boost::asio::deadline_timer 的文档之后,似乎 io_service::run() 和处理程序方法是在同一个线程上调用的。有什么方法可以在一个线程上创建一个计时器,
我很惊讶没有在 boost::asio(我们任何广泛使用的库)中找到时钟组件,所以它尝试制作一个简单、简约的实现来测试我的一些代码。 使用 boost::asio::deadline_timer 我制
当您在运行的计时器上调用 expires_from_now() 时,定时器被取消,并调用一个新的定时器。因此调用关联的处理程序。在处理程序中很容易区分在已取消和已过期的计时器之间。然而,我想知道,是否
我希望下面的代码打印 Hello, world!每 5 秒,但发生的情况是程序暂停 5 秒,然后一遍又一遍地打印消息,没有后续暂停。我错过了什么? #include #include #inclu
下面是一个用计时器包装线程的测试类的实现。奇怪的是,如果将截止日期设置为 500 毫秒,它会起作用,但如果我将它设置为 1000 毫秒,它就不会起作用。我做错了什么? #include "TestTi
我尝试在这个简单的测试应用程序中使用 boost deadline_timer,但遇到了一些麻烦。目标是使用 deadline_timer 的 expires_at() 成员函数让计时器每 45 毫秒
我正在使用多个 boost::asio::deadline_timer在一个 io_service 对象上。 std::shared_ptr的 boost::asio::deadline_timer存
我正在学习 Boost.Asio,但我对 boost::asio::deadline_timer async_wai 有疑问。这是来自 boost 主页的代码: // // timer.cpp //
我有一个 tcp 客户端,它会在截止日期前轮询服务器以获得答案,这样如果无法访问服务器,客户端就不会被阻止。我遇到的问题是 async_wait 似乎从不调用它的处理程序,在连接失败时有效地阻塞了客户
我能够为 boost deadline_time(它是一个成员)创建一个处理程序通过声明它是静态的。不幸的是,这会阻止访问非静态成员数据。 我有一系列超时。所以我的想法是有一个单一的 deadline
我使用 boost::asio::deadline_timer 来运行一个函数。我有如下 MosquitoInterface 类 class MosquitoInterface{ Mosquit
我想知道 boost::asio::deadline_timer 线程安全吗? 有人可以回答我吗? 最佳答案 您要查找的信息可以在documentation中找到. Thread Safety Dis
这个问题在这里已经有了答案: boost asio deadline_timer async_wait(N seconds) twice within N seconds cause operati
我是一名优秀的程序员,十分优秀!