ACE之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(intdelay,int interval,const void *arg = 0)
{
ACE_Time_Valuet1(delay);
ACE_Time_Valuet2(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();
return0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值