1

通过重新初始化,我的意思是停止正在运行的任务(或者如果必须的话甚至终止线程)并恢复,就好像管道/线程从未初始化/启动一样。

我的代码(我使用的是delphi 2010,OmniThreadLibrary 3.02)如下所示:

procedure SomeProc();
var
   AFile : TOmniValue;
begin
     APipeline := Parallel.Pipeline.NumTasks(5).Stage(StageProc).Run;

     AFile.CreateNamed(['FileID', FileID, 'FileName', FileName]);
     MyPipeline.Input.Add(AFile);
end;
// --------------- //
procedure StageProc(const Input, Output : IOmniBlockingCollection; const Task : IOmniTask);
begin
    // ...
end;

我需要这样的东西:

// --------------- //
procedure ResetPipeline();
begin
     // Stop any task running inside StageProc() & reset pipeline, ie.
     KillTasks(pipeline);
     pipeline := nil;
end;

笔记

  1. FWIW,是的,我完全知道这确实是个坏主意!

  2. 我也很清楚,最好的方法是向任务发送停止信号并等待它们很好地关闭,并经常检查任务内的停止信号。对于这个非常特殊的情况,我对此不感兴趣。

  3. 虽然上面的代码只提到了管道,但重置 BackgroundWorker 的解决方案对我来说就足够了。

提前致谢!

4

1 回答 1

0

免责声明:不建议强制终止线程——请不要在家里尝试。

我相信你可以像这样做你想做的事:

GlobalParallelPool.WaitOnTerminate_sec := 0;
GlobalParallelPool.CancelAll;
于 2012-11-10T20:08:29.803 回答