使用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;
}