Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 OTL-按需终止任务_Delphi_Delphi Xe2_Omnithreadlibrary - Fatal编程技术网

Delphi OTL-按需终止任务

Delphi OTL-按需终止任务,delphi,delphi-xe2,omnithreadlibrary,Delphi,Delphi Xe2,Omnithreadlibrary,如何按需终止任务?当我这样做时: CreateTask(TWorker.Create()) .Invoke(@TWorker.Execute) .MonitorWith(FEventMonitor) .SetParameter('ThreadID',i) .Join(FWorkers) .WithL

如何按需终止任务?当我这样做时:

CreateTask(TWorker.Create())
                    .Invoke(@TWorker.Execute)
                    .MonitorWith(FEventMonitor)
                    .SetParameter('ThreadID',i)
                    .Join(FWorkers)
                    .WithLock(FLockToken).Schedule(GlobalOmniThreadPool).WaitFor(0);



if Assigned(FWorkers) then begin
  // FWorkers.TerminateAll; freeze 
     FWorkers.TerminateAll(0); // freeze
     FWorkers:=nil;
     GlobalOmniThreadPool.CancelAll;
     Log('All tasks stopped',Form1.Memo1);
  end
   else begin
   Log('Nothing to stop',Form1.Memo1);
  end;
主应用程序冻结。我是否在外面运行它并不重要 或者在调试器内部,即使只有一个任务正在运行

因为我不想在任务中重复这个代码30次。让用户和编程人员感到沮丧

If GlobalCancel=true then
Task.Terminate;

如果不这样做,应该有一种全局性的方法。

您可能不想这样做,但这就是您取消任务的方式。@DavidHeffernan不应该这样做。我的任务有1000多行代码。谁来检查任务是否在每一行都被终止..不,真的,这就是它要做的。不是每一行。但这已经足够了。先发制人地终止任务或线程会导致共享对象处于定义错误的状态。你泄漏了内存。您使锁处于不一致的状态。你会遇到死锁等等。@DavidHeffernan根据gabr的论坛,这个功能甚至还没有实现,库的版本是3.00。。“目前,OTL基础设施不支持按需终止线程。”是的,我认为Primoz非常理解为什么先发制人地终止任务/线程是不明智的。