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é?

23
demandé sur g19fanatic 2010-11-24 16:56:15

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

18
répondu Default 2017-12-13 17:34:56

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.

21
répondu Lucio Paiva 2018-07-03 22:00:16