ACE笔记(4) -ACE_Reactor 机制下 的ACE异常处理
2009-04-18 12:00
344 查看
ACE_Manual_Event 类
唤醒所有正在等待的线程,并重新设置信号
常用构造:
ACE_Manual_Event(1) 表当前对象已经准备就绪,一旦有线程处于等待状态,就将触发并重置事件
异常处理的语法结构:
ACE_SEH_TRY
{
//可能发生异常的代码
}
ACE_SEH_EXCEPT (EXCEPTION_EXECUTE_HANDLER)
{
//发生异常后的处理
}
例子(来源于ACE自带的例子)如下
#include "ace/WFMO_Reactor.h"
ACE_RCSID(WFMO_Reactor, Exceptions, "Exceptions.cpp,v 4.1 2002/04/25 04:40:42 irfan Exp")
class Event_Handler : public ACE_Event_Handler
{
public:
Event_Handler (void)
: event_ (1)
{
ACE_DEBUG ((LM_DEBUG,
"Event_Handler created/n"));
}
~Event_Handler (void)
{
ACE_DEBUG ((LM_DEBUG,
"Event_Handler destroyed/n"));
}
int handle_signal (int signum, siginfo_t * = 0, ucontext_t * = 0)
{
char *cause_exception = 0;
char a = *cause_exception;
return 0;
}
ACE_HANDLE get_handle (void) const
{
return this->event_.handle ();
}
private:
ACE_Manual_Event event_;
};
class ACE_WFMO_Reactor_Test
{
public:
static void doit (ACE_WFMO_Reactor &wfmo_reactor)
{
for (int i = 1; i <= 10; i++)
{
ACE_DEBUG ((LM_DEBUG,
"Active threads in WFMO_Reactor (before handle_events) = %d/n",
wfmo_reactor.active_threads_));
ACE_SEH_TRY
{
wfmo_reactor.handle_events ();
}
ACE_SEH_EXCEPT (EXCEPTION_EXECUTE_HANDLER)
{
ACE_DEBUG ((LM_DEBUG,
"Exception occurred/n"));
}
ACE_DEBUG ((LM_DEBUG,
"Active threads in WFMO_Reactor (after handle_events) = %d/n",
wfmo_reactor.active_threads_));
}
}
};
int
ACE_TMAIN (int, ACE_TCHAR *[])
{
Event_Handler handler;
ACE_WFMO_Reactor wfmo_reactor;
wfmo_reactor.register_handler (&handler);
ACE_WFMO_Reactor_Test::doit (wfmo_reactor);
return 0;
}
唤醒所有正在等待的线程,并重新设置信号
常用构造:
ACE_Manual_Event(1) 表当前对象已经准备就绪,一旦有线程处于等待状态,就将触发并重置事件
异常处理的语法结构:
ACE_SEH_TRY
{
//可能发生异常的代码
}
ACE_SEH_EXCEPT (EXCEPTION_EXECUTE_HANDLER)
{
//发生异常后的处理
}
例子(来源于ACE自带的例子)如下
#include "ace/WFMO_Reactor.h"
ACE_RCSID(WFMO_Reactor, Exceptions, "Exceptions.cpp,v 4.1 2002/04/25 04:40:42 irfan Exp")
class Event_Handler : public ACE_Event_Handler
{
public:
Event_Handler (void)
: event_ (1)
{
ACE_DEBUG ((LM_DEBUG,
"Event_Handler created/n"));
}
~Event_Handler (void)
{
ACE_DEBUG ((LM_DEBUG,
"Event_Handler destroyed/n"));
}
int handle_signal (int signum, siginfo_t * = 0, ucontext_t * = 0)
{
char *cause_exception = 0;
char a = *cause_exception;
return 0;
}
ACE_HANDLE get_handle (void) const
{
return this->event_.handle ();
}
private:
ACE_Manual_Event event_;
};
class ACE_WFMO_Reactor_Test
{
public:
static void doit (ACE_WFMO_Reactor &wfmo_reactor)
{
for (int i = 1; i <= 10; i++)
{
ACE_DEBUG ((LM_DEBUG,
"Active threads in WFMO_Reactor (before handle_events) = %d/n",
wfmo_reactor.active_threads_));
ACE_SEH_TRY
{
wfmo_reactor.handle_events ();
}
ACE_SEH_EXCEPT (EXCEPTION_EXECUTE_HANDLER)
{
ACE_DEBUG ((LM_DEBUG,
"Exception occurred/n"));
}
ACE_DEBUG ((LM_DEBUG,
"Active threads in WFMO_Reactor (after handle_events) = %d/n",
wfmo_reactor.active_threads_));
}
}
};
int
ACE_TMAIN (int, ACE_TCHAR *[])
{
Event_Handler handler;
ACE_WFMO_Reactor wfmo_reactor;
wfmo_reactor.register_handler (&handler);
ACE_WFMO_Reactor_Test::doit (wfmo_reactor);
return 0;
}
相关文章推荐
- ACE笔记(4)- ACE_Reactor 机制下 的ACE异常处理
- ACE笔记(5)-ACE_Reactor 机制下的其他事件触发器
- ACE笔记(5) -ACE_Reactor 机制下的其他事件触发器
- ACE_Reactor 机制下的其他事件触发器
- ACE笔记(3)-用 ACE_Reactor 实现SOCKET事件处理
- 对ACE_TP_Reactor定时器处理机制做一点修改。
- netty学习笔记(一)—结合reactor模式探索netty对网络io的处理机制
- ACE_Reactor 机制下的其他事件触发器
- ACE笔记(3) -用ACE_Reactor 实现SOCKET事件处理
- ACE笔记(6) -Proactor机制下的异步SOCKET开发
- 【风】的ACE笔记(6) Proactor机制下的异步SOCKET开发
- 《Java并发编程的艺术》笔记二——Java并发机制的底层实现原理.md
- java学习笔记反射机制
- HOOK钩子机制学习笔记(3) - 钩子常用结构体MSDN翻译整理
- HDFS学习笔记(2)HDFS运行机制
- Android笔记二十三.Android基于事件监听器处理机制
- Android笔记二十五.Android事件Handler消息传递机制
- Linux内核运行机制学习笔记
- 对ACE反应器Reactor模式的示例程序分析