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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章