c++定时模块

来源:互联网 发布:任我行 陈奕迅 知乎 编辑:程序博客网 时间:2024/06/16 01:46
class IMTimeEvent{public:virtual void TimeOut() =0;};class MAPI MTimer{public:MTimer(void);~MTimer(void);BOOL Start(int millTime,IMTimeEvent* pEvent);BOOL Stop(IMTimeEvent* pEvent);void StopAll();typedef std::map<IMTimeEvent*,UINT_PTR>  TimeEvents;static TimeEvents s_TimeEvents;};
MTimer::TimeEvents MTimer::s_TimeEvents;extern VOID CALLBACK MTimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){for (MTimer::TimeEvents::const_iterator it = MTimer::s_TimeEvents.begin();it != MTimer::s_TimeEvents.end();++it){if ((*it).second == iTimerID){(*it).first->TimeOut();break;}}}MTimer::MTimer(void){}MTimer::~MTimer(void){//StopAll();}BOOL MTimer::Start(int millTime,IMTimeEvent* pEvent){Stop(pEvent);UINT_PTR timeID = SetTimer(NULL,0,millTime,MTimerProc);BOOL rtn = FALSE;if ( 0 !=timeID ){s_TimeEvents[pEvent] = timeID;rtn = TRUE;}return rtn;}BOOL MTimer::Stop(IMTimeEvent* pEvent){BOOL rtn =true;TimeEvents::iterator it = s_TimeEvents.find(pEvent);if (s_TimeEvents.end() != it){rtn = KillTimer(NULL,(*it).second);s_TimeEvents.erase(it);}return rtn;}void MTimer::StopAll(){for (TimeEvents::const_iterator it = s_TimeEvents.begin();it != s_TimeEvents.end();++it){KillTimer(NULL,(*it).second);}}

使用的时候必须继承一个IMTimeEvent接口,并且实现TimeOut()函数,MTimer类做为成员函数使用,可能我说的不是很清楚,就用一个简单的sample说一下吧

class A: public IMTimeEvent

{

public:

//IMTimeEvent

virtual void TimeOut();

MTimer m_Timer;

};

void A::TimeOut()

{

//你想要定时实现的东西

}

main()

{

m_Timer.Start(1000, this);

while(getchar()!=' ')

{

}

m_Timer.Stop(this);

}

0 0
原创粉丝点击