delphi——多线程(1)

来源:互联网 发布:ubuntu常用软件 编辑:程序博客网 时间:2024/06/05 19:52

一、

在 Delphi 中使用多线程有两种方法: 调用 API、使用 TThread 类; 使用 API 的代码更简单.

function MyFun(p: Pointer): Integer; stdcall;var  i: Integer;begin  for i := 0 to 500000 do  begin    Form1.Canvas.Lock;    Form1.Canvas.TextOut(10, 10, IntToStr(i));    Form1.Canvas.Unlock;  end;  Result := 0;end;procedure TForm1.Button1Click(Sender: TObject);var  ID: THandle;begin  CreateThread(nil, 0, @MyFun, nil, 0, ID);end;

二、

TThread 类实现

type  TMyThread = class(TThread)  protected    procedure Execute; override;  end;procedure TMyThread.Execute;var  i: Integer;begin  FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}  for i := 0 to 500000 do  begin    Form1.Canvas.Lock;    Form1.Canvas.TextOut(10, 10, IntToStr(i));    Form1.Canvas.Unlock;  end;end;procedure TForm1.Button1Click(Sender: TObject);begin  TMyThread.Create(False);end;

三、

在 Windows 上建立一个线程, 离不开 CreateThread 函数;
TThread.Create 就是先调用了 BeginThread (Delphi 自定义的), BeginThread 又调用的 CreateThread.

function CreateThread(  lpThreadAttributes: Pointer;           {安全设置}  dwStackSize: DWORD;                    {堆栈大小}  lpStartAddress: TFNThreadStartRoutine; {入口函数}  lpParameter: Pointer;                  {函数参数}  dwCreationFlags: DWORD;                {启动选项}  var lpThreadId: DWORD                  {输出线程 ID }): THandle; stdcall;                     {返回线程句柄}


0 0
原创粉丝点击