1

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

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;

主应用程序冻结。即使只有 1 个任务正在运行,我是在调试器外部还是内部运行它并不重要。

因为我不想将此代码放在任务中 30 次。令用户和程序员感到沮丧。

If GlobalCancel=true then
Task.Terminate;

如果没有这个,应该有一种方法可以在全球范围内做到这一点。

4

0 回答 0