📄 ostimer.h
字号:
#ifndef __OSTIMER_H__#define __OSTIMER_H__
#ifdef __Win32__
#pragma warning(disable:4786)
#endif
#include <queue>#include <vector>#include <map>#include <list>#include "OS.h"#include "OSHeaders.h"#include "OSMutex.h"#include "OSCond.h"#include "OSThread.h"typedef UInt64 TimerID_t;typedef TimerID_t Timer_T;
//////////////////////////////////////////////////////////////////////////
class CTimer
{
public:
Bool operator==(const Timer_T &other);
Bool operator==(const CTimer &y);
public:
CTimer();
~CTimer();
void Initialize(CEvent *pOwnerObj);
Bool Start(UInt32 nTimeoutVal); //参数: 单位秒
void Stop();
private:
CEvent *m_pOwnerObj;
Timer_T m_ID;
};
//////////////////////////////////////////////////////////////////////////
struct TimerData { TimerID_t m_ID; //超时时间 Int64 m_T; // OSTask *m_Task; //状态 enum {IDLE=0,RUN=1,STOP=2,REMOVE=3}; UInt8 m_Status; //消息相关 CEvent * m_MsgRecvObj; Int32 m_Value;
};//比较函数struct timer_greater { Bool operator()(const TimerData *v_1,const TimerData *v_2) { if(!v_1||!v_2) return false; return v_1->m_T > v_2->m_T; }};class TimerQueue : public std::priority_queue< TimerData *, std::vector<TimerData *>,timer_greater>{ public: TimerQueue(); ~TimerQueue(); //DEBUG void PrintQueue();};class OSTimerTask :public OSTask { protected: TimerID_t m_TimerID; OSTimerTask(); public: virtual ~OSTimerTask(); virtual Bool Run(); //取得定时器和移除定时器 TimerID_t GetTimer(CEvent *v_Obj); void RemoveTimer(TimerID_t v_id); Bool IsRun(TimerID_t v_id); //起动和停止定时器 Bool StartTimer(TimerID_t v_id,Int32 v_t,Int32 v_value=0,OSTask *v_Recv=NULL); void StopTimer(TimerID_t v_id); //初始化和终止OSTimerTask Bool Initialize(); void Terminate(); //取得和销毁OSTimerTask实例 static OSTimerTask *GetInstance(); static void DelInstance(); protected: TimerData * FindUnusedTimer(TimerID_t v_id); TimerData * FindUsedTimer(TimerID_t v_id); TimerData * FindRunTimer(TimerID_t v_id); TimerData * AllocTimerData(); void ReclaimTimerData(TimerData *v_td); void PrintRunList(); void PrintUnusedList(); void PrintUsedList(); void PrintAllList(); private: static OSTimerTask *m_inst; Bool m_isrun; //std::priority_queue< TimerData *, std::vector<TimerData *>,timer_greater > m_tlist; TimerQueue m_tlist; //std::map<TimerID_t, TimerData *> m_UnusedList; std::list<TimerData *> m_UnusedList; std::map<TimerID_t, TimerData *> m_UsedList; std::map<TimerID_t, TimerData *> m_RunList; OSMutex m_mutex; OSCond m_cond;};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -