2013-08-30 1 views
4

파이프 라인 작업을 어떻게 든 모니터링 할 수 있습니까? 나는이OmniThreadLibrary의 파이프 라인 단계를 모니터링하는 방법은 무엇입니까?

FPipeline := Parallel.Pipeline() 
    .Stage(StageWorker1, Parallel.TaskConfig.MonitorWith(MyMonitor)) 
    .NumTasks(MaxReadThreadCount) 
    .Stage(StageWorker2, Parallel.TaskConfig.MonitorWith(MyMonitor)) 
    .Run(); 

하지만 예외 내가 이해 내부 숨겨진 모니터가 이미 파이프 라인 단계가 설치되어 있기 때문에, 그런 일이 ("작업은 단 하나의 모니터로 모니터링 할 수 있습니다"를 받고 같은 각 작업에 모니터를 추가하려고).

+1

TOmniEventMonitor를 사용하지 않습니다. 어쨌든, 무엇을 감시하고 싶습니까? – gabr

+0

@gabr 한 곳에서 모든 단계의 메시지를 듣고 싶습니다. 모니터를 사용해야한다고 생각했습니다. – Andrew

답변

6

Parallel.TaskConfig.OnMessage를 사용하고 공통 메시지 처리 기능을 제공하십시오.

FPipeline := Parallel.Pipeline() 
    .Stage(StageWorker1, Parallel.TaskConfig.OnMessage(MessageProc)) 
    .NumTasks(MaxReadThreadCount) 
    .Stage(StageWorker2, Parallel.TaskConfig.OnMessage(MessageProc)) 
    .Run(); 

procedure MessageProc(var msg: TOmniMessage); 
begin 
    ... 
end; 
MessageProc

정상적인 절차 또는 방법 일 수있다.