delphi 协程 doroutine 参数传递

简介

协程参数传递,是下游协程 可以 获取上游协程的所有参数。由于 delphi 并不是像 golang 和 java 那样拥有GC器的语言,参数传递只支持基本类型,并不支持指针类型,避免开发人员写出难以维护的代码,程序员不应该把时间花在调试bug上,所以尽量写出 zero bugs 的代码;

示例代码

unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, doroutine;

type
  TFormMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

//日志
procedure log(msg: string);
begin
  OutputDebugString(PChar(msg));
end;

//协程3
procedure go3(go: TGo);
begin
  log(Format('go3可以获取到 id: %d; name: %s; age: %d; address: %s', [go.getInteger('id'), go.getString('name'), go.getInteger('age'), go.getString('address')]));
end;

//协程2
procedure go2(go: TGo);
begin
  log(Format('go2可以获取到 id: %d; name: %s; age: %d', [go.getInteger('id'), go.getString('name'), go.getInteger('age')]));

  //衍生子协程,并向子协程传递新的参数
  go.bg(go3).data('address', '上海黄埔').start;
end;

//协程1
procedure go1(go: TGo);
begin
  log(Format('go1可以获取到 id: %d; name: %s', [go.getInteger('id'), go.getString('name')]));

  //衍生子协程,并向子协程传递新的参数
  go.bg(go2).data('age', 18).start;
end;

procedure TFormMain.Button1Click(Sender: TObject);
begin
  go.bg(go1).data('id', 123).data('name', '欧阳疯').start;
  //也可以采用批量简化写法
  //go.bg(go1).datas(['id', 123, 'name', '欧阳疯']).start;
end;

end.

效果图

image

posted @ 2025-02-05 15:03  殴阳疯  阅读(109)  评论(0)    收藏  举报