C++定时器的实现与应用

该博客介绍了如何使用C++实现一个定时器系统,用于模拟鸭子乐园的场景。每5秒随机释放一只鸭子,7秒后鸭子返回笼子。13秒后鸭笼会随机生成新鸭子。主要思路是通过时间管理器(TimerServer)作为主题,鸭子和鸭笼作为观察者,使用定时器触发回调函数实现逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要目标

(暂时还有一些格式、规范的问题,可运行)


每过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::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值