예제 #1
0
Timer *
TimerQueue::Pop(std::chrono::steady_clock::time_point now) noexcept
{
  auto t = timers.begin();
  if (t != timers.end() && t->IsDue(now)) {
    Timer *timer = t->timer;
    timers.erase(t);
    return timer;
  } else
    return nullptr;
}
예제 #2
0
Timer *
TimerQueue::Pop(uint64_t now_us)
{
  Timer *timer = nullptr;
    
  auto t = timers.begin();
  if (t != timers.end() && t->IsDue(now_us)) {
    timer = t->timer;
    if (timer->IsActive()) {
      /* not cancelled by another thread */
      Add(*timer, t->due_us + timer->GetPeriod()*1000);
    } else {
      timer = nullptr;
    }
    
    timers.erase(t);
  }
  return timer;
}