Velmi jednoduchý, ale plně funkční příklad:
#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;
}
Všimněte si, že je velmi důležité volat expires_at()
nastavit nový čas vypršení, jinak se časovač spustí okamžitě, protože jeho aktuální čas vypršení již vypršel.
Druhý příklad na výukových programech Boosts Asio to vysvětluje.
Najdete ho zde.
Poté se podívejte na 3. příklad a zjistěte, jak jej můžete znovu volat s periodickým časovým intervalem
Preemptivní vlákna vs. Nepreemptivní vlákna
Výstup barevného zvýraznění na základě regulárního výrazu v shellu