Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi IOmniPipeline-未执行第2阶段_Delphi_Delphi 10.2 Tokyo_Omnithreadlibrary - Fatal编程技术网

Delphi IOmniPipeline-未执行第2阶段

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

我有一个简单的管道实现(IOmniPipeline),但是添加的第二个阶段没有被执行

代码如下:

 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(无限)在退出过程之前。