c++ - 如何使用多个deadline_timers?
问题描述
我正在设置 2 个 boost asio 最后期限定时器。第一个是立即启动,而第二个我希望能够在需要时打开和关闭。我的理解是我只需要为多个计时器使用一个 io_service 对象。
问题是, timer_A 正在立即调用 callback_a() ,就好像它没有任何工作要做一样。
我创建 io_service 并在构造函数中给它一个工作对象。
class TestClass
{
std::shared_ptr<boost::asio::deadline_timer> timer_A;
}
TestClass()::TestClass
{
io = std::make_shared<boost::asio::io_service>();
work = std::make_shared<boost::asio::io_service::work>(*io);
// ...
}
然后我立即启动 timer_B,但只创建 timer_A。我还没有给 timer_A 一个过期时间,所以它没有激活。
TestClass()::operator()()
{
timer_B = std::make_shared<boost::asio::deadline_timer>(*io,
boost::posix_time::seconds(30));
timer_B->async_wait(boost::bind(&TestClass::callback_b, this,
boost::asio::placeholders::error));
timer_A = std::make_shared<boost::asio::deadline_timer>(*io);
std::unique_ptr<std::thread> io_thread =
std::make_unique<std::thread>([&] { io->run(); });
// ...
while (running) {
// ...
}
io->stop();
io_thread->join();
}
稍后在运行时,我调用这个函数并给它一个过期时间,预计它将在调用时间后 10 秒过期。
TestClass::called_later()
{
timer_A->expires_at(timer_A->expires_at() +
boost::posix_time::seconds(10));
timer_A->async_wait(boost::bind(&TestClass::callback_a, this,
boost::asio::placeholders::error));
// ...
}
问题是 timer_A 立即过期,因为我看到它立即调用 callback_a。
任何人都看到我要去哪里错了吗?
解决方案
推荐阅读
- asp.net-core - 注册多项服务的最佳方式是什么?
- ios - 当@ObservedObject 使用 GCD 更改时,SwiftUI 视图不会更新
- javascript - 来自 RESTful API 的发布请求,提供 UnhandledPromiseRejectionWarning:ValidationError:产品验证失败:错误
- python - 我们如何在 python OOPS 中使用运算符重载技术来创建自动增量和自动减量函数
- excel - 将特定范围复制到从一个工作表到另一个操纵目标地址
- django - Django为用户设置一次随机密码
- python - 如何修复 nginx 504(网关超时)?
- sql-server - 在sql server中选择1700万条记录非常慢
- ios - MVC、Swift 中的依赖注入
- mysql - FROM 在此位置无效,需要 EOF,';'