主要目标
(暂时还有一些格式、规范的问题,可运行)
每过5秒钟,从鸭笼里随机放出一只鸭子,鸭子出笼后,很开心的发出了自己的叫声。自从这只鸭子放出后7秒后,鸭子觉得无趣,回到笼子去休息了。每过13秒,鸭笼里就会生下一只全新的鸭子(种类随机)。
主要思路
HTimeOut是一个抽象观察者,时间管理器(TimerServer)是主题,鸭子(Duck)鸭笼(DuckCage)这些用到定时器(Timer)的东西去继承观察者,然后再时间管理器中注册,等时间到了就时间管理器就向订阅了相应主题的观察者发通知,就是调用他们的回调函数HTimeOut中有一个OnTimeOut函数作为回调用。
定时器类
//Timer.h
class CTimer
{
public:
bool IsRing(int nTimeNow);//响应函数
bool IsLoop();//是否循环使用
bool TimerUpdate(int nTimeStart);//更新起始时间Sec
HTimeOut* GetHTimeOut();
CTimer(HTimeOut* pTimeOut,int nInterval, int nTimeStart, bool bLoop);
virtual ~CTimer(){};
private:
HTimeOut* _pTimeOut;//抽象观察者
int _nInterval;//定时时间Sec
int _nTimeStart;//开始时间Sec
bool _bLoop;
};
//Timer.cpp
bool CTimer::IsRing(int nTimeNow)
{
if(_nInterval <= nTimeNow-_nTimeStart)
return true;
else
return false;
}
bool CTimer::IsLoop()
{
return _bLoop;
}
bool CTimer::TimerUpdate(int nTimeStart)
{
this->_nTimeStart = nTimeStart;
return true;
}
HTimeOut* CTimer::GetHTimeOut()
{
return _pTimeOut;
}
CTimer::CTimer(HTimeOut* pTimeOut, int nInterval, int nTimeStart, bool bLoop)
{
this->_pTimeOut = pTimeOut;
this->_nInterval = nInterval;
this->_nTimeStart = nTimeStart;
this->_bLoop = bLoop;
}
定时器管理器类
//TimerServer.h
class CTimerServer
{
public:
CTimer* TimerCreate(HTimeOut* pTimeOut,int nInterval, int nTimeStart, bool bLoop);//创建一个定时器
bool TimerDestory(CTimer* pTimer);//销毁定时器
bool TimerScanning(int ntTimeNow);//每一个时间片来扫描所有定时器,超时就回调OnTimeOut
CTimerServer(){};
virtual ~CTimerServer(){};
static int _TimeSec;//静态变量表示时间Sec
private:
std::vector<CTimer* > _vTimer;//定时器容器
};
//TimerServer.cpp
int CTimerServer::_TimeSec = 0;//静态变量初始化
CTimer* CTimerServer::TimerCreate(HTimeOut* pTimeOut,int nInterval, int nTimeStart, bool bLoop)
{
CTimer* cTimer = new CTimer(pTimeOut, nInterval, nTimeStart, bLoop);
_vTimer.push_back(cTimer);
return cTimer;
}
bool CTimerServer::TimerDestory(CTimer* pTimer)
{
delete pTimer;
return true;
}
bool CTimerServer::