2013-08-30 27 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可以是一個正常的程序或方法。

相關問題