timertt-1.2.0
2017.10.27
Библиотека timertt обновлена до версии 1.2.0. Основные изменения:
Нарушена совместимость с предыдущими версиями. Это означает, что при переходе с timertt-1.1.* на 1.2.* может потребоваться изменение исходного кода. Так же была прекращена поддержка некоторых старых C++ компиляторов (в частности, VS2013).
Теперь пользователь может указать тип таймерного события посредством шаблонного параметра для timer_thread и timer_manager. Ранее таймерное событие всегда имело тип std::function
class operation_canceler { operation_manager & manager_; operation_id id_; public: operation_canceler(operation_manager & manager, operation_id id) : manager_{manager}, id_{id} {} void operator()() const noexcept { manager_.cancel(id_); } }; ... // Define type of timer thread which was use operation_canceler as // a timer action type. using my_timer_wheel_thread = timertt::timer_wheel_thread_template< operation_canceler, timertt::default_error_logger, timertt::default_actor_exception_handler >; ... // Create and use this timer thread. my_timer_wheel_thread tt; tt.start(); ... tt.activate( std::chrono::milliseconds(750), operation_canceler{manager, current_id});
Добавлены новые типы scoped_timer_objects, которые позволяют создавать таймерные события на стеке или внутри других объектов. Это позволяет избежать аллокации объектов в динамической памяти, но требует гораздо более внимательного отношения к размещению таймерных объектов со стороны разработчика:
void do_something_complex() { timertt::default_timer_wheel_thread tt; tt.start(); ... timertt::default_timer_wheel_thread::scoped_timer_object timer; // Activate tt.activate(timer, std::chrono::milliseconds(250), ...); ... // Timer can be deactivated in usual way. tt.deactivate(timer); ... tt.shutdown_and_join(); }