C++ Boost ASIO simple periodic timer?

前端 未结 4 1311
逝去的感伤
逝去的感伤 2020-12-03 04:40

I want a very simple periodic timer to call my code every 50ms. I could make a thread that sleeps for 50ms all the time (but that\'s a pain)... I could start looking into Li

4条回答
  •  独厮守ぢ
    2020-12-03 05:38

    A very simple, but fully functional example:

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

    Notice that it is very important to call expires_at() to set a new expiration time, otherwise the timer will fire immediately because it's current due time already expired.

提交回复
热议问题