f8/f8/timer.h
aozhiwei c4429a36a8 1
2022-12-17 14:06:02 +08:00

67 lines
1.7 KiB
C++

#pragma once
#include <a8/xtimer.h>
#include <a8/singleton.h>
namespace f8
{
class TimerWp
{
public:
TimerWp(a8::XTimerWp wp): p_(wp) {};
bool expired() { return p_.expired();};
auto&& lock() { return p_.lock(); };
private:
a8::XTimerWp p_;
friend class Timer;
};
class Attacher
{
public:
Attacher();
void ClearTimerList() { p_.ClearTimerList(); };
private:
a8::Attacher p_;
friend class Timer;
};
class Timer : public a8::Singleton<Timer>
{
private:
Timer() {};
friend class a8::Singleton<Timer>;
public:
void Init();
void UnInit();
bool Initialized();
void Update();
void SetTimeout(int expire_time, a8::TimerCb cb);
void SetTimeoutEx(int expire_time, a8::TimerCb cb, Attacher* attacher);
TimerWp SetTimeoutWp(int expire_time, a8::TimerCb cb);
TimerWp SetTimeoutWpEx(int expire_time, a8::TimerCb cb, Attacher* attacher);
void SetInterval(int expire_time, a8::TimerCb cb);
void SetIntervalEx(int expire_time, a8::TimerCb cb, Attacher* attacher);
TimerWp SetIntervalWp(int expire_time, a8::TimerCb cb);
TimerWp SetIntervalWpEx(int expire_time, a8::TimerCb cb, Attacher* attacher);
void FireEvent(TimerWp& timer_wp, int event, a8::Args* args);
void ModifyTime(TimerWp& timer_wp, int expire_time);
void Delete(TimerWp& timer_wp);
long long GetRemainTime(TimerWp& timer_wp);
void DeleteCurrentTimer();
bool IsRunning();
private:
bool initialized_ = false;
a8::XTimer xtimer_;
};
}