|
楼主 |
发表于 2007-12-19 21:19:22
|
显示全部楼层
出什么错误?Reactor和Proactor对定时器的支持非常好。高效方便。
ACE程序员指南,第7章第5节,第20章,都有叙述。此书本站资料栏目可以下载。
demo代码:- 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;
- }
- };
- MyTimerHandler * timer = new MyTimerHandler ();
- ACE_Time_Value initialDelay (3);
- ACE_Time_Value interval (5);
- ACE_Reactor::instance()->schedule_timer (timer,
- 0,
- initialDelay,
- interval);
- //schedule_timer重复使用是没问题的,返回不同的ID号码。
- //另外的demo:class CTimeOutHandler :
- public ACE_Event_Handler
- {
- public:
- CTimeOutHandler(void);
- ~CTimeOutHandler(void);
- //接口实现
- virtual int handle_timeout (const ACE_Time_Value ¤t_time,
- const void *act = 0);};
- typedef ACE_Singleton<CTimeOutHandler, ACE_Recursive_Thread_Mutex> TIMEOUT_HANDLER;
- typedef ACE_Singleton<ACE_Thread_Timer_Queue_Adapter<ACE_Timer_Heap>,ACE_Recursive_Thread_Mutex> ACTIVE_TIMER; ACTIVE_TIMER::instance()->activate();
- //注册定时器
- const ACE_Time_Value curr_tv = ACE_OS::gettimeofday();
- //20秒钟发生一次,测试
- ACE_Time_Value interval = ACE_Time_Value(20,0);
- long nTimer = ACTIVE_TIMER::instance()->schedule(TIMEOUT_HANDLER::instance(),0,curr_tv+ACE_Time_Value(20,0),interval);
复制代码 |
|