zoukankan      html  css  js  c++  java
  • ACE定时器

    每一秒钟打印一行

    http://www.tuicool.com/articles/Zb263e

    计时器的打开和关闭封装

    http://andylin02.iteye.com/blog/440572


    自己写的简单计时器:程序開始之后2秒钟之后运行第一次到时触发的动作,以后每隔一秒钟都会运行同样的动作;当运行总次数到达3次之后就终止计时,整个程序退出,并停止事件监听,释放资源

    #include <iostream>
    #include "ace/Log_Msg.h"
    #include "ace/Event_Handler.h"
    #include "ace/Reactor.h"
    #include "ace/Thread_Manager.h"
    
    bool stop_event_loop = false;//是否须要终止计时器服务
    
    class My_Timer_Handler : public ACE_Event_Handler
    {
    public:
        My_Timer_Handler(const int delay,const int interval);
        ~My_Timer_Handler();
        int handle_timeout(const ACE_Time_Value& , const void *act /* = 0 */);//计时器到期后运行的回调函数
    private:
        int n_;//循环计时的次数
        long time_handle_;//在计时器队列中的ID
    };
    
    My_Timer_Handler::My_Timer_Handler(const int delay,const int interval):n_(0)
    {
        std::cout<<"My_Timer_Handler()"<<std::endl;
        this->reactor(ACE_Reactor::instance());
        this->time_handle_ = this->reactor()->schedule_timer(this,//在这里注冊定时器
            0,
            ACE_Time_Value(delay),//程序一開始延迟delay秒開始首次运行到期函数
            ACE_Time_Value(interval));//循环计时,每隔interval秒反复运行
    }
    
    My_Timer_Handler::~My_Timer_Handler()
    {
        std::cout<<"~My_Timer_Handler()"<<std::endl;
    }
    
    
    int My_Timer_Handler::handle_timeout(const ACE_Time_Value& , const void *act /* = 0 */)
    {
        if (++this->n_>3)
        {
            ACE_Reactor::instance()->cancel_timer(this->time_handle_);
            stop_event_loop = true;
            std::cout<<"cancle_timer"<<std::endl;
        }
        else
        {
            std::cout<<"my timer handler handled timeout"<<std::endl;
        }
    
        return 0;
    }
    
    int main(int argc, char* argv[])
    {
        
        My_Timer_Handler my_handle(2,1);
    
        while (true)
        {
            if (stop_event_loop)
            {
                std::cout<<"stop handle time"<<std::endl;
                break;
            }
            ACE_Reactor::instance()->handle_events();
        }
    
        return 0;
    }
    


    
    
    执行结果例如以下:

    My_Timer_Handler()
    my timer handler handled timeout
    my timer handler handled timeout
    my timer handler handled timeout
    cancle_timer
    stop handle time
    ~My_Timer_Handler()
    请按随意键继续. . .


  • 相关阅读:
    [bzoj3524]Couriers
    [bzoj2789]Letters
    [bzoj4318]OSU!
    [luogu4570]元素
    [hdu6600]Just Skip The Problem
    [bzoj5025]单调上升路径
    [bzoj4557]侦察守卫
    [hdu5379]Mahjong tree
    [bzoj2957]楼房重建
    [noi253]A
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3987681.html
Copyright © 2011-2022 走看看