⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ostimer.h

📁 跨操作系统的微型中间件
💻 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 + -