重用 Boost 的计时器对象
Re-using Boost's timer objects
我在此处从Boost的计时器2教程中修改代码 定期打印输出:
#include <boost/date_time/posix_time/posix_time.hpp>
void print(const boost::system::error_code& /*e*/)
{
static int i = 0;
i++;
std::cout << i << std::endl;
}
int main()
{
while(1)
{
boost::asio::io_context io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
t.async_wait(&print);
t.wait();
io.run();
}
}
我没有得到的是,如果我在(1(之外使用前两条线,它将无法正常工作。有没有办法创建这些对象并重复使用它们?谢谢。
您需要使用
安排下一个计时器事件-
expires_at
http://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/reference/reference/basic_deadeadline_timer/expires_at.at.at.at.ht.html - 或
expires_from_now
http://www.boost.org/doc/libs/1_66_0/doc/doc/html/boost_asio/reference/reference/basic_deadeadline_timer/expires_from_now.now.html
所以,喜欢:
#include <boost/asio.hpp>
#include <iostream>
void print(boost::system::error_code ec) {
static int i = 0;
if (ec != boost::asio::error::operation_aborted) {
i++;
}
std::cout << i << " (" << ec.message() << ")" << std::endl;
}
int main() {
boost::asio::io_service io;
boost::asio::deadline_timer t(io);
while (1) {
t.expires_from_now(boost::posix_time::seconds(1));
t.async_wait(&print);
if (io.stopped()) { io.reset(); }
io.run();
}
}
好吧,该部分显然在计时器3教程中。另外,1.66的文档缺少信息。要将其更改为1.65。
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 在 C++ 对象包装器中安全地包含 C 代码
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 是否可以仅使用标准 c++/c++11 实现不带"sleep"的计时器?
- 避免 RAII 计时器对象中的虚假构造和破坏
- 从全局对象构造函数停止监视器计时器
- 重用 Boost 的计时器对象
- 对象内的计时器
- 每个对象的C++Qt计时器
- 如何在进程之间共享内核对象,例如可等待计时器