void io_service::schedule_timer(highp_timer* timer_ctl, timer_cb_t&& timer_cb)
{
if (timer_ctl == nullptr)
return;
std::lock_guard<std::recursive_mutex> lck(this->timer_queue_mtx_);
auto timer_it = this->find_timer(timer_ctl);
if (timer_it == timer_queue_.end())
{
this->timer_queue_.emplace_back(timer_ctl, std::move(timer_cb));
this->sort_timers();
// If the new timer is earliest, wakup
if (timer_ctl == this->timer_queue_.rbegin()->first)
this->interrupt();
}
else // always replace timer_cb
timer_it->second = std::move(timer_cb);
}
该函数在更新过期时间(比如缩短过期时间)后可能不能正常执行,能否改成如下代码,这样就在任何情况下都不会有问题。
void io_service::schedule_timer(highp_timer* timer_ctl, timer_cb_t&& timer_cb)
{
if (timer_ctl == nullptr)
return;
std::lock_guard<std::recursive_mutex> lck(this->timer_queue_mtx_);
auto timer_it = this->find_timer(timer_ctl);
if (timer_it == timer_queue_.end())
{
this->timer_queue_.emplace_back(timer_ctl, std::move(timer_cb));
}
else // always replace timer_cb
timer_it->second = std::move(timer_cb);
this->sort_timers();
// If the new timer is earliest, wakup
if (timer_ctl == this->timer_queue_.rbegin()->first)
this->interrupt();
}
该函数在更新过期时间(比如缩短过期时间)后可能不能正常执行,能否改成如下代码,这样就在任何情况下都不会有问题。