加载中…
个人资料
南冠彤
南冠彤
  • 博客等级:
  • 博客积分:0
  • 博客访问:415,028
  • 关注人气:59
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

(转)使用BOOST定时器自检网络线程的问题

(2012-10-29 17:31:25)
标签:

杂谈

分类: CPP/C
http://hi.baidu.com/yelangdefendou/item/73c13bd734ba1c382a35c731

在http接入服务器中用boost::asio::deadline_timer m_tmTimeoOut;来定时自检。
void IHpsServer::DoSelfCheck()
{
        m_isAlive = true;
        m_tmTimeoOut.expires_from_now(boost::posix_time::seconds(3));
        m_tmTimeoOut.async_wait(MakeHpsAllocHandler(m_allocTimer,boost::bind(&IHpsServer::DoSelfCheck, this)));
}
          有 一个问题,当用ab执行压力测试(开启多个进程,每个进程不停地执行ab)时,在高压之下,io_service忙于处理连接、收发数据。没有及时响应该 定时器,致使长时间没有将m_isAlive置为true,导致自检线程在检测该线程体的时候误认为该线程体已死,执行自杀操作。
         最终还是将该定器去掉,不对该线程体做自检操作。使其依赖于业务线程的自检结果。
如此有一个隐患,当该线程体不执行网络数据读取,或io_service发生故障,不能响应正常的连接请求时,不能及时发现问题。
暂时用该方案:当开启该线程体时将bool型的isRunning置为true,当stop时,置为false。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有