2011-10-04 2 views
0

ace 수락자를 사용하여 TCP 포트를 수신합니다. 내 클래스가 My_Svc_Handler에서 파생되었으며 클래스 My_Svc_Handler의 함수 int open (void *)을 암시합니다.ACE 수락 자 - My_Svc_Handler 클래스

ACE_Reactor::instance()->register_handler(this, 
    ACE_Event_Handler::READ_MASK); 

나는 우리가 registore 할 필요가 왜 understant 해달라고 : 내가 본 모든 예에서 는 오픈 함수 내에서, 그들은 원자로를 registor? 이미 이벤트를 기다리는 반응기가 있습니다. 메인에 정의 된이 I :

typedef ACE_Acceptor<My_Svc_Handler,ACE_LSOCK_ACCEPTOR> MyAcceptor; 

int main(int argc, char* argv[]){ 
ACE_UNIX_Addr addr("/tmp/addr.ace"); 
MyAcceptor acceptor(address, ACE_Reactor::instance()); 

while(1) /* Start the reactors event loop */ 
    ACE_Reactor::instance()->handle_events(); 
} 

는 내가라는 open 함수가있을 때 이해 해달라고 같아요.

그 방법에 대해 다른 질문이 있습니다. while (1)을 실행하지 않는 다른 방법이 있습니까?

답변

0

UNIX/Linux의 ACE의 Reactor의 기본 구현이 Select_Reactor하고 이름으로이 원자로는 데이터를 사용할 수있을 때 이벤트를 디스패치 select 시스템 호출을 실행하고있는 모든 의미 때문에 등록을해야하는 이유는 소켓에. 그러므로 select에 소켓을 소켓리스트에 추가하지 않고 select 읽기 또는 쓰기 디스크립터 목록에 데이터를 입력하면 Reactor은 아무것도하지 않습니다.

이것이 바로 register_handler입니다.