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