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

相關詞條

熱門詞條

聯絡我們