ACE Reactor 处理信号

    使用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;
}
展开阅读全文

没有更多推荐了,返回首页