zoukankan      html  css  js  c++  java
  • delphi Parallel 之 TTask 初试

    unit Unit1;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
      System.Generics.Collections;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        procedure TaskProc(Sender: TObject);
        function FutureEvent(Sender: TObject): string;
      public
        { Public declarations }
      end;
    
    
    var
      Form1: TForm1;
    
    
    
    implementation
    
    {$R *.dfm}
    
    uses
      System.Threading, System.SyncObjs, System.Diagnostics;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ATask: ITask;
    begin
      ATask := TTask.Run(Self, Form1.TaskProc);
      ATask.Start;
      //阻塞至线程结束
      ATask.Wait;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      ATask: IFuture<string>;
    begin
      ATask := TTask.Future<string>(function: string
        begin
          TThread.Sleep(3000);
          Result := DateTimeToStr(Now);
        end);
      //阻塞至线程结束
      Caption := ATask.Value;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      ATask: IFuture<string>;
    begin
      ATask := TTask.Future<string>(Self, FutureEvent);
      //阻塞至线程结束
      Caption := ATask.Value;
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    var
      TaskArray: TArray<ITask>;
      I: Integer;
    begin
      SetLength(TaskArray, 5);
      for I := Low(TaskArray) to High(TaskArray) do
        TaskArray[I] := TTask.Run(procedure
          begin
            TThread.Sleep(1000);
          end);
      //阻塞至线程结束
      TTask.WaitForAll(TaskArray);
      ShowMessage('ok');
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ReportMemoryLeaksOnShutdown := True;
    end;
    
    function TForm1.FutureEvent(Sender: TObject): string;
    begin
      Result := DateTimeToStr(Now);
    end;
    
    procedure TForm1.TaskProc(Sender: TObject);
    var
      I: Integer;
    begin
      TThread.Sleep(3000);
      for I := 0 to 10 do
        TThread.Queue(nil, procedure
          begin
            Memo1.Lines.Add(Sender.ClassName);
          end);
    end;
    
    end.
  • 相关阅读:
    Python进程池multiprocessing.Pool的用法
    基于opencv的车牌提取项目
    Srapy 爬取知乎用户信息
    Scrapy框架简介及小项目应用
    豆瓣爬取图书标签
    CSS选择器使用
    关于 urlencode 的使用和 json 模块的介绍
    urllib库使用方法
    猫眼电影的各种爬取方法
    淘宝商品信息爬取
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/7495367.html
Copyright © 2011-2022 走看看