diff --git a/core/timermanager.cpp b/core/timermanager.cpp index da11e8a..a6be221 100644 --- a/core/timermanager.cpp +++ b/core/timermanager.cpp @@ -54,6 +54,27 @@ uint32_t TimerManager::add_oneshot_timer(uint64_t timeout, timer_cb cb) return ti->id; } +uint32_t TimerManager::add_immediate_timer(timer_cb cb) { + TimerInfo* ti = new TimerInfo; + + ti->id = ++this->id; + ti->timeout_ns = this->get_time_now() + 10; + ti->interval_ns = 0; + ti->cb = cb; + + std::shared_ptr timer_desc(ti); + + // add new timer to the timer queue + this->timer_queue.push(timer_desc); + + // notify listeners about changes in the timer queue + if (!this->cb_active) { + this->notify_timer_changes(); + } + + return ti->id; +} + uint32_t TimerManager::add_cyclic_timer(uint64_t interval, uint64_t delay, timer_cb cb) { if (!interval || interval <= MIN_TIMEOUT_NS) { diff --git a/core/timermanager.h b/core/timermanager.h index a2d737b..4ef9f89 100644 --- a/core/timermanager.h +++ b/core/timermanager.h @@ -103,6 +103,7 @@ public: // creating and cancelling timers uint32_t add_oneshot_timer(uint64_t timeout, timer_cb cb); + uint32_t add_immediate_timer(timer_cb cb); uint32_t add_cyclic_timer(uint64_t interval, timer_cb cb); uint32_t add_cyclic_timer(uint64_t interval, uint64_t delay, timer_cb cb); void cancel_timer(uint32_t id);