2010-11-24 6 views
20

Je veux une minuterie périodique très simple pour appeler mon code toutes les 50ms. Je pourrais faire un fil qui dort 50ms tout le temps (mais c'est une douleur) ... Je pourrais commencer à regarder dans Linux API pour faire des minuteries (mais ce n'est pas portable) ...C++ Boost Minuterie périodique simple ASIO?

comme comme pour utiliser boost .. Je ne suis pas sûr que ce soit possible. Est-ce que boost fournit cette fonctionnalité?

Répondre

18

Le deuxième exemple sur les tutoriels Boosts Asio l'explique. Vous pouvez le trouver here.

Après cela, check the 3rd example pour voir comment vous pouvez l'appeler à nouveau avec un temps périodique intervall

+0

Ces liens conduisent à une erreur 404. –

+1

@PhilippLudwig merci pour la notification. Ils semblent avoir changé le format du lien. J'ai mis à jour les liens – Default

+0

Merci pour la mise à jour rapide :) –

17

Un très simple, par exemple 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; 
} 

avis qu'il est très important d'appeler expires_at() à définir une nouvelle heure d'expiration, sinon le chronomètre se déclenchera immédiatement car son heure d'échéance est déjà expirée.

+0

cela fonctionnera-t-il si l'heure du système est changée? – AndrewStone

+0

@AndrewStone Je ne pense pas, mais si cela vous inquiète, vous pouvez utiliser une minuterie stable, qui ne sera pas affectée par les changements d'heure du système. Jetez un oeil ici: http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/steady_timer.html Il devrait être facile de porter mon exemple ci-dessus pour l'utiliser. –

+0

oui, merci! la minuterie régulière a travaillé – AndrewStone

Questions connexes