我想要一个非常简单的周期计时器来调用我的代码每50ms。我可以做一个一直睡眠50ms的线程(但这很痛苦)……我可以开始研究Linux API来制作定时器(但它不能移植)……
我想使用boost..我只是不确定这有没有可能。boost是否提供此功能?
发布于 2010-11-24 22:01:32
发布于 2015-07-03 02:32:01
一个非常简单但功能齐全的示例:
#include <iostream>
#include <boost/asio.hpp>
boost::asio::io_service io_service;
boost::posix_time::seconds interval(1); // 1 second
boost::asio::deadline_timer timer(io_service, interval);
void tick(const boost::system::error_code& /*e*/) {
std::cout << "tick" << std::endl;
// Reschedule the timer for 1 second in the future:
timer.expires_at(timer.expires_at() + interval);
// Posts the timer event
timer.async_wait(tick);
}
int main(void) {
// Schedule the timer for the first time:
timer.async_wait(tick);
// Enter IO loop. The timer will fire for the first time 1 second from now:
io_service.run();
return 0;
}
注意,调用expires_at()
来设置一个新的过期时间非常重要,否则计时器将立即触发,因为它的当前到期时间已经过期。
发布于 2019-04-04 00:17:17
来进一步扩展这个简单的例子。它会像注释中所说的那样阻塞执行,所以如果你想运行更多的io_services,你应该像这样在线程中运行它们。
boost::asio::io_service io_service;
boost::asio::io_service service2;
timer.async_wait(tick);
boost::thread_group threads;
threads.create_thread(boost::bind(&boost::asio::io_service::run, &io_service));
service2.run();
threads.join_all();
https://stackoverflow.com/questions/4267546
复制相似问题