2010-11-24 16 views
20

Quiero un temporizador periódico muy simple para llamar a mi código cada 50 ms. Podría hacer un hilo que tiene capacidad para 50 ms todo el tiempo (pero eso es un dolor) ... Podría empezar a buscar en Linux API para la fabricación de temporizadores (pero no es portátil) ...C++ Boost Temporizador periódico simple ASIO?

me había como para usar boost ... no estoy seguro de que sea posible. ¿El impulso proporciona esta funcionalidad?

Respuesta

18

El segundo ejemplo en Boosts Asio tutoriales lo explica.
Lo puedes encontrar here.

Después de eso, check the 3rd example a ver cómo se puede llamar de nuevo con un tiempo periódico intervall

+0

Estos enlaces conducen a un error 404. –

+1

@PhilippLudwig gracias por la notificación. Parecen haber cambiado el formato de enlace. Actualicé los enlaces – Default

+0

Gracias por la actualización rápida :) –

17

Un ejemplo muy simple, completamente funcional:

#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; 
} 

en cuenta que es muy importante llamar expires_at() a establecer un nuevo tiempo de vencimiento; de lo contrario, el temporizador se disparará inmediatamente porque el tiempo de vencimiento actual ya ha expirado.

+0

¿funcionará esto si se cambia la hora del sistema? – AndrewStone

+0

@AndrewStone No lo creo, pero si le preocupa eso, puede usar un temporizador estable, que no se verá afectado por los cambios de tiempo del sistema. Eche un vistazo aquí: http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/steady_timer.html Debería ser fácil portar mi ejemplo anterior para usarlo. –

+0

sí, gracias! el temporizador estable funcionó – AndrewStone

Cuestiones relacionadas