Пример #1
0
vector<TimerEvent*> Timer::GetExpiredTimerEvent(const Timestamp& now_ts)
{
    LOG_VERBOSE << "us:" << now_ts.GetTimeUs() << endl;
    vector<TimerEvent*> expired_events;

    PrintWaitEvent();

    auto iter = wait_event_.lower_bound(now_ts.GetTimeUs());
    auto it = wait_event_.begin();
    while (it != iter)
    {
        auto timer_it = id_timer_map_.find(it->second);
        if (timer_it != id_timer_map_.end())
        {
            expired_events.push_back(timer_it->second.get());
        }
        else
        {
            LOG_VERBOSE << "timer id:" << it->second << " has been canceled" << endl;
        }

        it = wait_event_.erase(it);

        LOG_VERBOSE << "some timer event happend" << endl;
    }

    return expired_events;
}