注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

永恒的遗失古都-亚特兰蒂斯

一个游戏开发者的个人博客。

 
 
 

日志

 
 

简易的看门狗监测 WatchDogThread  

2015-09-29 18:38:41|  分类: 程序相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文由自由骑士笃志原创,可自由转载,若转载请保留此行声明。
简介:
可以防止死锁【例如对逻辑或者渲染线程的监视】
可以定期输出一些信息【例如定期输出硬件状态】
可以监视部分对象活动状况【例如loading】
可以做心跳功能【例如对客户端或者服务器连接的监视】
的简易定时器对象 - 看门狗

原理:
一个单独的线程,对一个注册的对象进行监视,该对象需要定期主动发出消息喂狗,若定期没喂超时,狗就抓狂回调。

伪代码:
class IThread
{
    virtual void Run() = 0;
    void Start();
    static void SetThreadName( const char* szName );
    static void Sleep( float fSeconds );
    static void SetPriority( float fPriority );
    static ThreadID GetCurThreadID();
    static void RunThread( void(*main)(void*), void* arg );
}
class WatchDogThread : public IThread
{
    uint64     m_llCountdownStart;
    void*       m_pHandler;
    WatchDogThread(void* pHandler) m_pHandler : pHandler{}
    virtual void Run()
    {
        ResetWatchDogCountdown();
        while( true )
        {
            IThread::Sleep(10);
            uint64 llNow =  Platform::GetTime();
            if( llNow - m_llCountdownStart > TEST_WATCHDOG_TIMEOUT )
            {
                if( m_pHandler ) m_pHandler->WatchDogTestFailed(); //喂狗失败
            }
            PrintInfos();
        }
    }
    void ResetWatchDogCountdown(); //喂狗
    {
        m_llCountdownStart = Platform::GetTime();
    }
}
  评论这张
 
阅读(16)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017