Delphi IOmniPipeline-未执行第2阶段
我有一个简单的管道实现(IOmniPipeline),但是添加的第二个阶段没有被执行 代码如下:Delphi IOmniPipeline-未执行第2阶段,delphi,delphi-10.2-tokyo,omnithreadlibrary,Delphi,Delphi 10.2 Tokyo,Omnithreadlibrary,我有一个简单的管道实现(IOmniPipeline),但是添加的第二个阶段没有被执行 代码如下: var OmniPipeline: IOmniPipeline; begin OmniPipeline := Parallel.Pipeline; OmniPipeline.Stage(DoDataTransfer_A); OmniPipeline.Stage(DoDataTransfer_B); // <---- This stage is not being exe
var
OmniPipeline: IOmniPipeline;
begin
OmniPipeline := Parallel.Pipeline;
OmniPipeline.Stage(DoDataTransfer_A);
OmniPipeline.Stage(DoDataTransfer_B); // <---- This stage is not being executed!
OmniPipeline.OnStop(DataTransferCompleteEvent).Run;
OmniPipeline.input.Add(nil);
OmniPipeline.input.CompleteAdding;
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
procedure DoDataTransfer_B(const input: TOmniValue; var output: TOmniValue);
begin
//some code here
end;
var
Omnipline:IOmniPipeline;
开始
Omnipline:=平行管道;
Omnipline.阶段(DoDataTransfer__A);
Omnipline.阶段(DoDataTransfer_B);// “我希望DoDataTransfer_A完成后,程序DoDataTransfer_B将立即执行。”
不,阶段不必按顺序执行-它们可以同时执行,这是使用管道的要点之一。DoDataTransfer_B将在您传递输入后立即执行,即:
procedure DoDataTransfer_A(const input: TOmniValue; var output: TOmniValue);
var
InputItem: TOmniValue;
begin
....
Output.Add(InputItem); // InputItem could be input param directly, or any other input
end;
我怀疑你没有那样做。因此,显示您的编码将是相关的。您可以发布一个完整的示例吗?也许DoDataTransfer_A失败了,谁知道呢?@whosrdaddy我可以确认DoDataTransfer_A
过程正确完成,因为它内部有日志记录,我看到它正在完全执行。我已经更新了这个问题来添加2个过程的方法签名。我猜你的问题是,在A阶段中间,你失去了对流水线的引用,这会导致它在阶段完成后被破坏,因此不会继续进行阶段B。尝试放置OmniPipeline.WaitFor(无限)代码>在退出过程之前。