本例演示了使用ACE_Reactor处理信号的方法,主要有三个个关键步骤:
1.编写信号处理函数,针对感兴趣的信号进行处理。
2.将此信号处理对象注册到Reactor中。
3.启动Reactor的事件处理循环。
下面的代码演示了在程序运行时按下“Ctrl+C”和“Ctrl+Break"是的处理结果。
#include "stdafx.h" #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; }