前言
ACE框架的使用是相互依存的,各个框架通过遵循一定的准则来相互配合,共同完成特定的功能。如果你违反了这些约定,幸运的话在调试期可以发现错误(程序的崩溃),不幸的话在程序运行期发生不希望看到的结果(如连接无法正常关闭)。本系列文章记载怎样遵循这些规则来正确使用ACE。
场景
平台:Windows XP,ACE5.5,VS2005
通过反应器模式和继承自ACE_Event_Handler的特定事件处理器处理socket IO事件。通过CTRL + C回调信号事件处理器,代码如下:
ACE框架的使用是相互依存的,各个框架通过遵循一定的准则来相互配合,共同完成特定的功能。如果你违反了这些约定,幸运的话在调试期可以发现错误(程序的崩溃),不幸的话在程序运行期发生不希望看到的结果(如连接无法正常关闭)。本系列文章记载怎样遵循这些规则来正确使用ACE。
场景
平台:Windows XP,ACE5.5,VS2005
通过反应器模式和继承自ACE_Event_Handler的特定事件处理器处理socket IO事件。通过CTRL + C回调信号事件处理器,代码如下:
void
handle_sig(
int
)
{
ACE_TRACE( ACE_TEXT("handle_sig"));
ACE_Reactor::instance()->end_reactor_event_loop();
}
int WFMO_Reactor_Test()
{
ACE_TRACE(ACE_TEXT("WFMO_Reactor_Test"));
ACE_INET_Addr addr(5678);
Acceptor acceptor(addr);
if (acceptor.start() == -1)
ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%p "), ACE_TEXT("Listen")), -1);
ACE_DEBUG((LM_DEBUG, ACE_TEXT("Service start...... ")));
ACE_Reactor::instance()->run_reactor_event_loop();
ACE_DEBUG((LM_DEBUG, ACE_TEXT("Service stop!!! ")));
return 0;
}
int ACE_TMAIN( int , ACE_TCHAR * [])
{
ACE_TRACE( ACE_TEXT("handle_sig"));
ACE_Reactor::instance()->end_reactor_event_loop();
}
int WFMO_Reactor_Test()
{
ACE_TRACE(ACE_TEXT("WFMO_Reactor_Test"));
ACE_INET_Addr addr(5678);
Acceptor acceptor(addr);
if (acceptor.start() == -1)
ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%p "), ACE_TEXT("Listen")), -1);
ACE_DEBUG((LM_DEBUG, ACE_TEXT("Service start...... ")));
ACE_Reactor::instance()->run_reactor_event_loop();
ACE_DEBUG((LM_DEBUG, ACE_TEXT("Service stop!!! ")));
return 0;
}
int ACE_TMAIN( int , ACE_TCHAR * [])