每一秒钟打印一行
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()
请按随意键继续. . .