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();
    }