Un exemple très simple, mais entièrement fonctionnel :
#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;
}
Notez qu'il est très important d'appeler expires_at()
pour définir une nouvelle heure d'expiration, sinon le minuteur se déclenchera immédiatement car son heure d'échéance actuelle a déjà expiré.
Le deuxième exemple sur les tutoriels Boosts Asio l'explique.
Vous pouvez le trouver ici.
Après cela, vérifiez le 3ème exemple pour voir comment vous pouvez le rappeler avec un intervalle de temps périodique.