delphi多线程程序示例

来源:互联网 发布:网络情缘 编辑:程序博客网 时间:2024/04/29 09:23

(*----下面这个程序介绍了我们在使用线程及未使用线程二种情况下,运行该程序的反应。当点UsedThread按钮时,则建立一个线程,这时我们可以在程序进行计算的同时,改变窗体的尺寸及移动它。当按下NoUsedThread按钮时,不建立线程,我们会发现在程序没有计算完之前根本不能做其它任何事情!

unit Unit1;

interface

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons;

type  TForm1 = class(TForm)    UsedThread: TBitBtn;    NoUsedThread: TBitBtn;    procedure UsedThreadClick(Sender: TObject);    procedure NoUsedThreadClick(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;

var  Form1: TForm1;

implementation

{$R *.dfm}

function MyThreadFunc(P:pointer):Longint;stdcall;var  i:longint;  DC:HDC;  S:string;begin  DC:=GetDC(Form1.Handle);  for i:=0 to 500000 do begin    S:=Inttostr(i);    Textout(DC,10,10,Pchar(S),length(S));  end;  ReleaseDC(Form1.Handle,DC);end;

procedure TForm1.UsedThreadClick(Sender: TObject);var  hThread:Thandle;//定义一个句柄  ThreadID:DWord;begin//创建线程,同时线程函数被调用  hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);  if hThread=0 then  messagebox(Handle,'Didn’tCreateaThread',nil,MB_OK);end;

procedure TForm1.NoUsedThreadClick(Sender: TObject);begin  MyThreadfunc(nil);  //没有创建线程时,直接调用线程函数end;end.