2012-02-20 2 views
1

여러 스레드가있는 시스템에서 ace register_handler 함수를 사용하고 있습니다. 가끔씩 register_handler가 실패합니다. 나는 (get_handle 함수를 호출하여) 파일 디스크립터를 출력했고, 파일 디스크립터가 1000 이상일 때 get_handle이 실패한 것을 발견했다. 이유를 아는 사람이 있습니까?에이스 register_handler가 실패했습니다.

답변

0

저는 ACE 전문가가 아닙니다. 그러나 ACE_Event_Handler 클래스의 기본 구현은 매번 오류를 반환하는 것으로 보입니다. ACE 소스 코드에서 추출 :

ACE_HANDLE 
ACE_Event_Handler::get_handle (void) const 
{ 
    ACE_TRACE ("ACE_Event_Handler::get_handle"); 
    return ACE_INVALID_HANDLE; 
} 

파생 클래스는 자체적으로 구현해야합니다.

ACE_HANDLE DerivedClass::get_handle(void) const 
{ 
    return peer().get_handle(); 
} 

내가

  1. 에 당신을 추천 할 것입니다 당신이 당신의 유래에서 그 방법을 제공하는 확인 클래스는 클래스 ACE_Event_Handler에서 파생 따라서 당신은 의미있는 결과를하기 위해 get_handle() 메소드를 오버라이드 (override) 할 필요 수업.
  2. 그렇다면 구현을 다시 확인하십시오. 우리 문제는 여기에 있습니다. (구현에 대한 자세한 내용을 알려주십시오.)
  3. 재정의를 제공하지 않았다면이를 구현해야한다는 것을 알고 있습니다.
+0

많은 파일 설명자를 열어야하기 때문에 regitor_handle이 실패 함을 알게되었습니다. 에이스를 다시 컴파일하지 않고 에이스가 지원하는 파일 디스크립터의 수를 늘릴 수있는 방법이 있습니까? – Shay

+0

운영체제 문제라고 생각합니다. 어떤 OS를 사용하고 있습니까? Win32? 리눅스? –

+0

Linux. 제한이 1024 인 것을보고 있지만 그것을 늘리고 싶습니다 – Shay

관련 문제