schedule_timer
schedule_timer是ACE_Reactor的一个成员函式, ACE_Reactor又称为反应堆或者反应器。
反应器的schedule_timer函式用来设定一个定时事件,当时间到达时回调事件处理器的handle_timeout处理函式。
schedule_timer的原型如下:
schedule_timer (ACE_Event_Handler*event_handler, const void *arg, const ACE_Time_Value &delay, constACE_Time_Value &interval=ACE_Time_Value::zero)
参数说明:
event_handler:事件处理器指针
arg:传递给handle_timeout的参数
delay:延迟多久后定时器开始启动
interval:定时器继续触发的时间间隔,如果採用默认值,则表示定时器只在延迟后触发一次
返回值为一个唯一的timer_id,该只可用于cancel_timer取消一个定时器,注意,cancel_timer会回调处理器的handle_close函式
handle_timeout的原型如下:
int handle_timeout (const ACE_Time_Value¤t_time, const void *act=0)
参数说明:
current_time:当前回调该处理函式的时间。要该参数是因为系统本身有时延,这个值和定时器本该触发的时间有一定的误差。
act:为handle_timeout的arg,注意,要考虑act的作用域(在调用schedule_timer时arg的作用域是否在调用反应器的run_event_loop()时仍然有效)
例子代码如下:
#include <iostream>#include <ace/Event_Handler.h>#include <ace/Reactor.h>class Timer:public ACE_Event_Handler{ public: int handle_timeout(const ACE_Time_Value¤t_time, const void *act=0) { char*p = (char*) act; std::cout<< "time out:"; if(p) std::cout<< p; std::cout<< std::endl; } Timer(int delay,int interval,const void *arg = 0) { ACE_Time_Value t1(delay); ACE_Time_Value t2(interval); timer_id_= ACE_Reactor::instance()->schedule_timer(this,arg,t1,t2); }private: longtimer_id_;};int main(int argc, char* argv[]){ Timert(3,1,"hahahha"); ACE_Reactor::instance()->run_event_loop(); return 0;}
转载请注明出处海之美文 » schedule_timer