Задачу с ошибкой можно отслеживать только с помощью одного монитора при настройке моего монитора на задачу в dll

Я использую OmniThreadLibrary 2.09 в своей dll, основное приложение и dll используют один и тот же SimpleShareMem менеджер памяти.

Я создал свой собственный монитор с этим кодом:

  FMonitor: TOmniEventMonitor;
  ...
  FMonitor := TOmniEventMonitor.Create(nil);

Когда я пытаюсь создать новую задачу с помощью этого монитора, я получаю сообщение об ошибке «Задачу можно отслеживать только с помощью одного монитора».

FTask := OtlTaskControl.CreateTask(TaskWorker)
  .OnMessage(
    procedure(const ATaskControl: IOmniTaskControl; const AMsg: TOmniMessage)
    begin
      ...
    end)
  .MonitorWith(FMonitor)  //  <----- Error
  .OnTerminated(
    procedure (const ATaskControl: IOmniTaskControl)
    begin
      ...
    end)
  .Run();

Как я могу контролировать свою задачу с помощью собственного монитора?


person Andrew    schedule 29.08.2013    source источник


Ответы (1)


Функция OnMessage создает неявный монитор, который получает сообщение задачи и вызывает вашу анонимную функцию. То же самое касается OnTerminated.

Если вы хотите использовать MonitorWith, вы должны реализовать обработку сообщений и обработку завершения как события монитора, а не с помощью функций OnMessage/OnTerminated.

person gabr    schedule 29.08.2013