2010-01-18 7 views
0

내 응용 프로그램에서 타이머를 관리하는 모듈이 있습니다. 이 클래스는 다음과 같은 세 가지 기능을 기본으로 제공합니다.ACE 리액터 타이머 관리 스레드는 안전합니까?

ACE_Reactor 인스턴스는 타이머를 관리하기 위해 모듈에서 내부적으로 사용됩니다.

  • 일정 타이머 - ACE_Reactor :: schedule_timer()를 호출합니다. 인수 중 하나는 타이머 경험에 따라 호출되는 콜백입니다.
  • 타이머를 취소는 -, ACE_Reactor :: cancel_timer()를

실행의 개인 타이머 실행 반응기 호출 때문에 일정/취소하고 제한 시간 콜백이 다른 스레드에서 실행됩니다.

ACE_Reactor::schedule_timer()은 힙 할당 구조 (arg 인수)를받습니다.

이 구조는 나중에 타이머를 취소하거나 시간 제한 처리기가 호출 될 때 삭제됩니다. 그러나 취소 및 타임 아웃 처리기가 다른 스레드에서 실행되므로 구조가 두 번 삭제되는 경우가있는 것처럼 보입니다.

타임 아웃 처리기를 호출 할 때 타이머가 취소되도록하는 것이 원자로의 책임이 아닙니까?

+0

'cancel_timer' 결과를 확인합니까? 또한 힙 할당 구조의 삭제 관리 방법에 대한 정보를 얻는 데 도움이됩니다. 핸들러의'handle_close' 메소드에서 삭제됩니까? –

답변

0

AFAIK 이러한 경우는 ACE_TP_Reactor에서 가능합니다. TP- 반응기를 사용하면 타임 아웃이 동일한 스레드에서 동기화되지 않습니다. 나는. 타임 아웃은 다른 스레드에서 handle_input을 수행하는 중에 발생할 수 있습니다. 이벤트를 동기화해야합니다. 동기화를 위해 ACE_Event_Handler 인터페이스를 채택하는 것이 깔끔한 방법입니다.