使用Reactor框架处理信号;首先从ACE_Event_Handler类派生出一个子类,并实现它的方法handle_signal(),在这个方法中编写信号处理代码;然后,通过两个适当的register_handler()方法中的一个来登记信号事件处理器(新派生出来的类的对象)。
处理信号的Reactor框架一旦启动起来,当捕捉到信号的时候,信号处理器对象的handle_signal()方法就会被Reactor框架回调,以响应信号的动作。
在handle_signal()回调方法中,可以调用ACE_Reactor::instance()->notify(ACE_Event_Handler*)回调方法;来通知信号处理器做某件事情。
#include "ace/Reactor.h"
#include "ace/Event_Handler.h"#include <signal.h>
class SignalHandler : public ACE_Event_Handler
{
int handle_signal(int signum, siginfo_t * /* = 0 */, ucontext_t * /* = 0 */)
{
switch(signum)
{
case SIGINT:
ACE_DEBUG((LM_DEBUG,ACE_TEXT("SIGINT!/n")));
break;
case SIGTERM:
ACE_DEBUG((LM_DEBUG,ACE_TEXT("SIGTERM!/n")));
break;
case SIGBREAK:
ACE_DEBUG((LM_DEBUG,ACE_TEXT("SIGBREAK!/n")));
break;
}
return 0;
}
};
int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
SignalHandler sh;
ACE_Reactor::instance()->register_handler(SIGINT,&sh);
ACE_Reactor::instance()->register_handler(SIGTERM,&sh);
ACE_Reactor::instance()->register_handler(SIGBREAK,&sh);
while(1)
{
ACE_Reactor::instance()->handle_events();
}
return 0;
}