C++ Boost ASIO simple minuterie périodique?
Je veux une minuterie périodique très simple pour appeler mon code toutes les 50ms. je pourrais faire un thread qui dort pendant 50ms tout le temps (mais c'est une douleur)... Je pourrais commencer à regarder dans les API Linux pour faire des minuteries (mais ce n'est pas portable)...
Je voudrais utiliser boost.. Je ne suis pas sûr que c'est possible. Boost fournit-il cette fonctionnalité?
2 réponses
Le deuxième exemple sur les didacticiels Asio Boosts l'explique.
Vous pouvez le trouver ici.
Après cela, vérifiez le 3ème exemple pour voir comment vous pouvez l'appeler à nouveau avec un intervalle de temps périodique
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 la minuterie se déclenchera immédiatement car elle est déjà expirée.