C++ Boost ASIO simple periodic timer? C++ Boost ASIO simple periodic timer? linux linux

C++ Boost ASIO simple periodic timer?


A very simple, but fully functional example:

#include <iostream>#include <boost/asio.hpp>boost::asio::io_service io_service;boost::posix_time::seconds interval(1);  // 1 secondboost::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;}

Notice that it is very important to call expires_at() to set a new expiration time, otherwise the timer will fire immediately because it's current due time already expired.


The second example on Boosts Asio tutorials explains it.
You can find it here.

After that, check the 3rd example to see how you can call it again with a periodic time intervall


To further expand on this simple example. It will block the execution as was said in the comments, so if you want more io_services running, you should run them in a thread like so...

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();