2011-03-28 3 views
3

관리자 메시지가 내 gen_event 관리자 프로세스에서 수신되면 모든 처리기가 처리 한 후 다른 이벤트를 처리하기 전에 중지해야합니다.gen_event 관리자에게 원자 적으로 알리고 중지합니다

-module(manager). 

... 

stop(Reason) -> 
    gen_event:sync_notify(manager, {stop, Reason}), 
    gen_event:stop(manager). 

그러나 이것은 그렇지 않으면 sync_notifystop 전에 다른 프로세스에서 보낸 이벤트를 처리 할 수있는, handle_event({stop, Reason}, State)에서 remove_handler을 반환하는 모든 핸들러가 필요합니다 내가 찾을 수있는 유일한 방법은 이것이다. 핸들러에 대한 요구 사항을 부과하지 않는 접근 방식을 선호합니다.

답변

2

내가 아는 한, 실제로 하나의 호출로 제한된 방식으로 처리하기 위해 사용하는 방법 외에 다른 방법은 없습니다. exit(Pid, Reason) 또는 이벤트를 사용하여 이벤트 관리자를 평범하게 종료하는 것 외에는 그것의 자신의 상사에 의해 폐쇄 될 것이다.

관련 문제