2013-08-29 2 views
3

내 dll, 주 응용 프로그램에 OmniThreadLibrary 2.09를 사용하고 dll에서 동일한 SimpleShareMem 메모리 관리자를 사용하고 있습니다. 오류 내 모니터를 dll의 작업으로 설정할 때 "모니터를 하나의 모니터로만 모니터링 할 수 있습니다."

는이 코드와 내 자신의 모니터를 만든 :
FMonitor: TOmniEventMonitor; 
    ... 
    FMonitor := TOmniEventMonitor.Create(nil); 

나는이 모니터 새 작업을 만들려고

, 나는 오류 "작업은 단 하나의 모니터로 모니터링 할 수 있습니다"를 얻고있다

FTask := OtlTaskControl.CreateTask(TaskWorker) 
    .OnMessage(
    procedure(const ATaskControl: IOmniTaskControl; const AMsg: TOmniMessage) 
    begin 
     ... 
    end) 
    .MonitorWith(FMonitor) // <----- Error 
    .OnTerminated(
    procedure (const ATaskControl: IOmniTaskControl) 
    begin 
     ... 
    end) 
    .Run(); 

내 모니터로 내 작업을 모니터하려면 어떻게해야합니까?

답변

7

OnMessage 함수는 작업 메시지를 수신하고 익명의 함수를 호출하는 암시 적 모니터를 만듭니다. OnTerminated도 마찬가지입니다.

MonitorWith를 사용하려면 메시지 처리 및 종료 처리를 OnMessage/OnTerminated 기능이 아닌 모니터 이벤트로 구현해야합니다.

+1

위대한 스레딩 라이브러리에 감사드립니다. – Andrew