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

📄 ew_timermanager.h

📁 基于Windml2.0的窗口系统原代码 , 以及和MFC CDC兼容的CDC
💻 H
字号:
/*--------------------------------------------------------------------------

	EW_TimerManager.h - 定时器管理器类的头文件

	本程序是FishGUI软件的一部分

	版权所有 (C) 2003,2004 王咏武
	http://www.contextfree.net/wangyw/

----------------------------------------------------------------------------

	作者对 FishGUI 软件及其所有源代码授权如下:

	允许任何个人、组织、机构、企业无偿获得、修改、使用、重新发布 FishGUI 软
	件及其源代码,或按照有偿或者无偿的方式发行基于 FishGUI 源代码的全部或部
	分内容开发的软件产品,——但行使以上权利时,须遵守以下约定:

	1、重新发布 FishGUI 软件及其源代码时,不得隐去软件及其源代码中原有的版
	   权信息和开发者标识。

	2、发行基于 FishGUI 源代码的全部或部分内容开发的软件产品时,必须在产品
	   的显著位置标明以下字样:

	   【本产品的一部分功能是基于王咏武在 FishGUI 软件中的工作完成的】

	3、在正式出版物中引用 FishGUI 的文档、源代码或注释内容的,应注明软件的
	   原作者为王咏武。

--------------------------------------------------------------------------*/
/*! \addtogroup Framework
 *  @{ 
 */

/*! \file
 *  \brief 定时器管理器类的头文件
 *
 */

#ifndef EW_TIMERMANAGER_H_HEADER_INCLUDED_C0A3F06D
#define EW_TIMERMANAGER_H_HEADER_INCLUDED_C0A3F06D

#include "EW_Utility.h"
#include "EW_OSAdaptor.h"
#include "EW_Object.h"
#include "cdc_platform.h"
class EW_Object;

//##ModelId=3FD884F5022C
/*! \brief 定时器类
 *
 *  管理定时器的标识、到期时间、申请该定时器的窗口元素等信息
 */
class EW_Timer
{
public:
    //##ModelId=3FD884F70347
    /*! \brief 构造函数
     *
     *  \param pTarget 申请定时器的窗口元素
     *  \param timerID 定时器的唯一标识
     *  \param dwInterval 定时器的到期时间
     */
    EW_Timer(EW_Object * pTarget, BYTE timerID, DWORD dwInterval) 
        : m_TimerID(timerID), m_dwInterval(dwInterval), m_dwCount(dwInterval),
        m_pTarget(pTarget)
        {}

    /*! \brief 定时器嘀嗒处理函数
     *
     *  检查该定时器是否到期,如果到期,发送定时器消息给对应的窗口元素
     */
    //##ModelId=40BB6F970366
    void Tick(void);

    //##ModelId=3FD884F702E4
    BYTE        m_TimerID;          /*!< 定时器的唯一标识(对于同一个窗口元素唯一) */
    //##ModelId=3FD884F702F8
    DWORD       m_dwInterval;       /*!< 定时器的到期时间(单位:毫秒) */
    //##ModelId=3FD884F70316
    DWORD       m_dwCount;          /*!< 当前计数器 */
    //##ModelId=3FD884F7032A
    EW_Object * m_pTarget;          /*!< 申请定时器的窗口元素,定时器到期消息会被发送给该窗口元素 */
};

//##ModelId=3F5C4ED700C1
/*! \brief 定时器管理器类
 *
 *  管理系统中的所有定时器,单件类。
 */
class EW_TimerManager : public EW_OSMsgObserver
{
public:
    //##ModelId=3F5C57A203B7
    /*! \brief 得到定时器管理器的唯一实例对象的全局访问点函数
     *
     *  \return 指向定时器管理器的唯一实例对象的指针
     */
    static EW_TimerManager * GetTimerManager(void);

    //##ModelId=3F71AB2000E8
    /*! \brief 删除定时器管理器的唯一实例对象
     */
    static void DeleteTimerManager(void);

    //##ModelId=3F5C57A30001
    bool StartTimer(EW_Object * pTarget, BYTE timerID, DWORD dwInterval);
    //##ModelId=3F5DAA150033
    bool KillTimer(EW_Object * pTarget, BYTE timerID);
    //##ModelId=3F71AB20011A
    bool KillObjectTimer(EW_Object * pTarget);
    //##ModelId=3F71AB20014C
    bool IsTimerStart(EW_Object * pTarget, BYTE timerID);
    //##ModelId=3F5DAA150051
    bool KillAllTimer();

    //##ModelId=3F5C57A30138
    void OSMessage(EW_Message * pMsg);

protected:
    //##ModelId=3F5C57A3028C
    /*! \brief 构造函数
     *
     *  用户不能直接访问
     */
    EW_TimerManager();

    //##ModelId=3F71AB20019C
    /*! \brief 析构函数
     *
     *  用户不能直接访问,删除所有的定时器
     */
    ~EW_TimerManager() { KillAllTimer(); }

private:
    //##ModelId=3F5DD9650193
    typedef EW_SList<EW_Timer> EW_TIMERLIST;    /*!< 保存定时器的容器类型 */

    //##ModelId=3F5DD9660087
    EW_TIMERLIST m_TimerList;                   /*!< 保存定时器的容器变量 */

    //##ModelId=3F5C57A2039C
    static EW_TimerManager * m_pTimerManager;   /*!< 指向唯一的定时器管理器实例对象的指针 */
};

/*! \brief 封装定时器管理器的全局访问点\ref EW_TimerManager::GetTimerManager的全局函数
 *
 *  \return 指向唯一的定时器管理器的指针
 */
EW_TimerManager * EW_GetTimerManager(void);

//##ModelId=3FD884F5002D
/*! \brief 查找定时器的检查类
 *
 *  用于迭代器查找定时器管理其中的所有定时器
 */
class EW_CheckTimer : public EW_ListCheck<EW_Timer>
{
public:
    //##ModelId=3FD884F60165
    /*! \brief 定时器的检查类的构造函数
     *
     *  \param pObject 申请定时器的目标窗口元素
     *  \param timerID 定时器ID
     */
    EW_CheckTimer(EW_Object * pObject, BYTE timerID) : m_pTarget(pObject), m_TimerID(timerID) {}

    //##ModelId=3FD884F60183
    /*! \brief 检查对象是否满足条件
     *
     *  通过比较定时器的ID和目标窗口元素来决定该定时器是否满足条件
     *  \param pTimer 要检查的定时器
     *  \return 是否满足条件\n
     *          true    满足条件\n
     *          false   不满足条件
     */
    virtual bool FindIt(const EW_Timer * pTimer) { return (pTimer->m_pTarget == m_pTarget && pTimer->m_TimerID == m_TimerID); }

private:
    //##ModelId=3FD884F60134
    EW_Object * m_pTarget;          /*!< \brief 申请定时器的目标窗口元素 */
    //##ModelId=3FD884F60152
    BYTE        m_TimerID;          /*!< \brief 定时器ID */
};

#endif /* EW_TIMERMANAGER_H_HEADER_INCLUDED_C0A3F06D */

/*! @} */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -