feat update
Some checks failed
rpcrypto-build / build (Debug, himix200.toolchain.cmake) (push) Successful in 1m24s
rpcrypto-build / build (Release, hisiv510.toolchain.cmake) (push) Successful in 1m18s
rpcrypto-build / build (Release, himix200.toolchain.cmake) (push) Successful in 1m21s
linux-hisiv500-gcc / linux-gcc-hisiv500 (push) Successful in 1m53s
rpcrypto-build / build (Debug, hisiv510.toolchain.cmake) (push) Successful in 2m10s
linux-mips64-gcc / linux-gcc-mips64el (push) Has been cancelled
linux-x64-gcc / linux-gcc (push) Has been cancelled

This commit is contained in:
tqcq 2024-02-27 12:58:22 +08:00
parent c1dbc8194e
commit 2e0e00af0c

View File

@ -50,23 +50,23 @@ TimerManager::TimerManager()
TimerId TimerId
TimerManager::AddTimerImpl(const Timer::ExpireCallback &cb, TimerManager::AddTimerImpl(const Timer::ExpireCallback &cb,
uint64_t run_after_ms, uint64_t run_after_ms,
uint64_t interval) uint64_t interval)
{ {
MutexGuard guard(timer_inserting_set_lock_); MutexGuard guard(timer_inserting_set_lock_);
auto *timer = auto *timer = new Timer(TimeNowInMicroSeconds() + run_after_ms * 1000,
new Timer(TimeNowInMicroSeconds() + run_after_ms * 1000, interval * 1000); interval * 1000);
timer->on_expire() = cb; timer->on_expire() = cb;
if (!timer_inserting_set_.insert({timer->when(), timer}).second) { if (!timer_inserting_set_.insert({timer->when(), timer}).second) {
ULOG_ERROR("system.timer_manager", "Add timer failed, already exists timer_id={}", timer->id()); ULOG_ERROR("system.timer_manager",
"Add timer failed, already exists timer_id={}", timer->id());
delete timer; delete timer;
return 0; return 0;
} }
if (timers_lock_.TryLock()) { timers_lock_.Lock();
timers_cond_.NotifyAll(); timers_cond_.NotifyAll();
timers_lock_.Unlock(); timers_lock_.Unlock();
}
return timer->id(); return timer->id();
} }
@ -75,10 +75,9 @@ TimerManager::CancelTimerImpl(TimerId timer_id)
{ {
MutexGuard guard(timer_canceling_set_lock_); MutexGuard guard(timer_canceling_set_lock_);
timer_canceling_set_.insert(timer_id); timer_canceling_set_.insert(timer_id);
if (timers_lock_.TryLock()) { timers_lock_.Lock();
timers_cond_.NotifyAll(); timers_cond_.NotifyAll();
timers_lock_.Unlock(); timers_lock_.Unlock();
}
} }
void void
@ -102,7 +101,8 @@ TimerManager::Loop()
{ {
// TODO imporve // TODO imporve
MutexGuard cancel_guard(timer_canceling_set_lock_); MutexGuard cancel_guard(timer_canceling_set_lock_);
for (auto iter = timers_.begin(); !timer_canceling_set_.empty() && iter != timers_.end();) { for (auto iter = timers_.begin();
!timer_canceling_set_.empty() && iter != timers_.end();) {
if (timer_canceling_set_.find(iter->second->id()) if (timer_canceling_set_.find(iter->second->id())
!= timer_canceling_set_.end()) { != timer_canceling_set_.end()) {
delete iter->second; delete iter->second;
@ -124,9 +124,10 @@ TimerManager::Loop()
uint64_t wait_time_ms = (timers_.begin()->first - now) / 1000; uint64_t wait_time_ms = (timers_.begin()->first - now) / 1000;
timers_cond_.WaitForMilliseconds(timers_guard, wait_time_ms); timers_cond_.WaitForMilliseconds(timers_guard, wait_time_ms);
now = TimeNowInMicroSeconds(); now = TimeNowInMicroSeconds();
} while(timers_.begin()->first > now); } while (timers_.begin()->first > now);
} else { } else {
ULOG_TRACE("system.timer_manager", "need trigger set size: {}", timers_.size()); ULOG_TRACE("system.timer_manager", "need trigger set size: {}",
timers_.size());
std::set<Entry> expired_timers; std::set<Entry> expired_timers;
while (!timers_.empty() && timers_.begin()->first <= now) { while (!timers_.empty() && timers_.begin()->first <= now) {
expired_timers.insert(*timers_.begin()); expired_timers.insert(*timers_.begin());
@ -136,7 +137,7 @@ TimerManager::Loop()
for (auto iter = expired_timers.begin(); for (auto iter = expired_timers.begin();
iter != expired_timers.end(); ++iter) { iter != expired_timers.end(); ++iter) {
uint64_t when = iter->first; uint64_t when = iter->first;
Timer* timer = iter->second; Timer *timer = iter->second;
try { try {
timer->on_expire()(); timer->on_expire()();
if (timer->auto_reset()) { if (timer->auto_reset()) {
@ -175,16 +176,14 @@ TimerManager::Instance()
{ {
static TimerManager timer_manager; static TimerManager timer_manager;
static std::once_flag init_flag; static std::once_flag init_flag;
std::call_once(init_flag, [&]{ std::call_once(init_flag, [&] { timer_manager.Initialize(); });
timer_manager.Initialize();
});
return timer_manager; return timer_manager;
} }
TimerId TimerId
TimerManager::AddTimer(const Timer::ExpireCallback &cb, TimerManager::AddTimer(const Timer::ExpireCallback &cb,
uint64_t run_after_ms, uint64_t run_after_ms,
uint64_t interval) uint64_t interval)
{ {
return Instance().AddTimerImpl(cb, run_after_ms, interval); return Instance().AddTimerImpl(cb, run_after_ms, interval);
} }