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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值