понедельник, 18 апреля 2011 г.

Использование OmniThread Libray 2.0 (OTL 2.0) для создания многопоточных приложений. Простые фоновые задачи в OTLParallel

Ранее мы рассматривали создание параллельных задач всегда в контектсте использования CreateTask. Однако для простых задач, можно использовать новую особенность библиотеки а именно - Parallel.Async.
Короче говоря, Parallel.Async принимает анонимные методы, обычный метод или процедуру (все они должны быть без параметров) и выполняет его в фоновом потоке. Вот и все чудеса. Для простых фоновых задач это уже подспорье. Отпадает нужда в вызове CreateTask.

Рассмотрим это на простейшем примере:
  Parallel.Async(
    procedure
    begin
      MessageBeep($FFFFFFFF);
    end,
Для несколько более сложных сценариев, вы можете указать второй параметр, который является либо анонимным методом, обычным метод или процедурой (опять же без каких-либо параметров), которая будет выполнена после завершения выполнения фоновойзадачи. Это вторая часть кода выполняется в основном потоке программы, так что вы спокойно в данном коде можете взаимодействовать с VCL.
procedure TfrmDemoParallelAsync.btnAsyncClick(Sender: TObject);
begin
  btnAsync.Enabled := false;

  Parallel.Async(
    procedure
    begin
      //  Запуск в параллельном потоке
      Sleep(500);
      MessageBeep($FFFFFFFF);
    end,

    //  После завершения фоновой задачи выполняем этот анонимный метод
    procedure
    begin
      // выполняем в основном потоке программы
      btnAsync.Enabled := true;
    end
  );
end;
Просто и эффективно.

Продолжение следует…



1 комментарий: