使用Task1观看Task2-如果停止则重新启动

时间:2019-01-07 08:27:09

标签: delphi omnithreadlibrary

使用OmniThreadLibrary我想用另一个task1观看task2来检测task2是否停止或完成。目的是如果任务2由于任何原因而停止,则重新启动它。直到没有,我使用以下构造:

  Task1 := CreateTask(
    procedure(const mTask: IOmniTask)
    begin
      while not mTask.Terminated do
      begin
        Sleep(1000);
        // create Task2 and run it, if it is not running
        if Task2 = nil then
        begin
          Task2 := CreateTask(
            procedure(const mTask: IOmniTask)
            begin
              while not mTask.Terminated do
              begin
                Sleep(1000);
              end;
            end)
            .OnTerminated(procedure(const mTask: IOmniTaskControl)
              begin
                Task2 := nil;
              end);
          Task2.Run;
        end;
      end;
    end)
    .OnTerminated(
      procedure(const mTask: IOmniTaskControl)
      begin
        Task1 := nil;
      end);
  Task1.Run;

如果我尝试使用此代码终止内部task2

Task2.Terminate(10000);

我收到以下错误:

  

TOmniEventMonitorPool.Release:未为线程分配监视器   xxx。

相同的代码适用于task1:

Task1.Terminate(10000);

两个问题:

  1. 我不明白,这段代码出了什么问题以及“监视”错误的含义。
  2. 如果task2完成了,如何让task1正确启动task2并重新启动它?

预先感谢

0 个答案:

没有答案