ACE两种定时器区别

yule253456724 2011-06-13 03:17:21
求助 不清楚两种定时器的区别 请大侠们 说说呗

什么情况用那种比较好

第一种 new 完了 不用析构吗 还是 系统的 schedule_timer 有析构啊

定时器1

#include "ace/OS_NS_time.h"
#include "ace/Log_Msg.h"
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"

// Listing 1 code/ch07
class MyTimerHandler : public ACE_Event_Handler
{
public:
int handle_timeout (const ACE_Time_Value ¤t_time,
const void * = 0)
{
time_t epoch = ((timespec_t)current_time).tv_sec;

ACE_DEBUG ((LM_INFO,
ACE_TEXT ("handle_timeout: %s\n"),
ACE_OS::ctime (&epoch)));

return 0;
}
};



int ACE_TMAIN (int, ACE_TCHAR *[])
{
MyTimerHandler * timer = new MyTimerHandler ();
ACE_Time_Value initialDelay (3); //初始延时时间
ACE_Time_Value interval (5); //间隔时间
ACE_Reactor::instance()->schedule_timer (timer,
0,
initialDelay,
interval);
ACE_Reactor::instance ()->run_reactor_event_loop ();
return 0;
}




定时器2


typedef ACE_Thread_Timer_Queue_Adapter<ACE_Timer_Wheel> ActiveTimer; ActiveTimer timer; class CB:public ACE_Event_Handler{public: CB () : id_(0) { } virtual int handle_timeout (const ACE_Time_Value &tv,const void *arg) { //printf("Update\r\n"); ((SessionManager *)arg)->Update(1); return 0; } int id_;}; //登记定时器void RegTimer()
{
//创建实例
if(m_cb) delete m_cb;
m_cb = new CB();

//启动定时器线程
m_atimer.activate ();
const ACE_Time_Value curr_tv = ACE_OS::gettimeofday ();
ACE_Time_Value interval1 = ACE_Time_Value (0, 1000000/8);//包处理时间

//注册定时器
m_cb->id_ = m_atimer.schedule (m_cb, //event_handler 定时器会在指定时间间隔定时调用它的handle_timeout函数
this, //传入handle_timeout的参数
curr_tv + ACE_Time_Value (3L), //起始时间
interval1); //循环时间间隔
ACE_Thread_Manager::instance ()->wait (); // Wait forever.
}//去掉定时器void UnRegTimer()
{
if(m_cb){
m_atimer.cancel(m_cb->id_);
delete m_cb;
m_cb = NULL;
}
}
...全文
668 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yule253456724 2011-06-20
  • 打赏
  • 举报
回复
最后的求助啦
yule253456724 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 freezezdj 的回复:]
第一个要与ACE_Event_Handler配合,与I/O,Timeout,属于事件。
分别回调ACE_Event_Handler::Handle_Input, Handle_Output, Handle_Timeout这几个虚函数。

第二个没用过,可能比较独立,比较通用的定时工具。
[/Quote]

那第一个就这么写就行了呗 不用析构什么的吗
yule253456724 2011-06-16
  • 打赏
  • 举报
回复
最后的求助啦
冻结 2011-06-16
  • 打赏
  • 举报
回复
第一个要与ACE_Event_Handler配合,与I/O,Timeout,属于事件。
分别回调ACE_Event_Handler::Handle_Input, Handle_Output, Handle_Timeout这几个虚函数。

第二个没用过,可能比较独立,比较通用的定时工具。
天煞19 2011-06-16
  • 打赏
  • 举报
回复
原来这个code是这样用的!!
天煞19 2011-06-16
  • 打赏
  • 举报
回复
a
天煞19 2011-06-16
  • 打赏
  • 举报
回复
a
yule253456724 2011-06-15
  • 打赏
  • 举报
回复
来人啊 昨天CSDN 404了
yule253456724 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lanneret1234 的回复:]
定时器1: 如果“handle_”方法返回的整数<0,反应器将自动回调此事件处理器的 handle_close()方法
你可以在handle_close()做处理工作

另一种从反应器的内部表中拆除事件处理器的方法是显式地调用反应器的 remove_handler()方 法集, 删除后在delete

定时器2: 没用过,我想原理这也差不多,你可以自己去看一下源代码!!!
[/Quote]

这两种的区别知道吗
lanneret1234 2011-06-13
  • 打赏
  • 举报
回复
定时器1: 如果“handle_”方法返回的整数<0,反应器将自动回调此事件处理器的 handle_close()方法
你可以在handle_close()做处理工作

另一种从反应器的内部表中拆除事件处理器的方法是显式地调用反应器的 remove_handler()方 法集, 删除后在delete

定时器2: 没用过,我想原理这也差不多,你可以自己去看一下源代码!!!
yule253456724 2011-06-13
  • 打赏
  • 举报
回复
那我就继续等人来吧
ryfdizuo 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yule253456724 的回复:]

来人啊 难道是我发错地方了?
[/Quote]
ace虽然很有名,但是没用过。
yule253456724 2011-06-13
  • 打赏
  • 举报
回复
来人啊 难道是我发错地方了?
luciferisnotsatan 2011-06-13
  • 打赏
  • 举报
回复
没用过,帮顶
yule253456724 2011-06-13
  • 打赏
  • 举报
回复
怎么没人来啊

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧