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;}