有专门的多线程函数吗?谢谢!

解决方案 »

  1.   


    Tks,找了个例子,重来没有写过dephi程序,不过有一些编程基础
    想照这例子写一个简单的多线程小程序就OK了,谢谢
      

  2.   

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

  3.   

    有专门的THREAD类,DELPHI有DEMO 
      

  4.   

    delphi里有TThread类对线程专门做了封装,你只要覆盖execute方法,就可以了.
    如果有参数传递你可以重载create和destroy方法,包括同步也有Synchronize方法,
    如果你的线程操作比较复杂的话,建议你把这个类的源代码看一遍.
    http://blog.csdn.net/fenger8293
    我这里做过介绍.
      

  5.   

    DELPHI自带有实现多线程DEMO源码 C:\Program Files\Borland\Delphi6\Demos\Threads
      

  6.   

    文件>新建>线程对象 
    假设名字为t1
    UNIT1里
    use添加UNIT2var
      Form1: TForm1;
      P1:t1;procedure TForm1.FormCreate(Sender: TObject);
    begin
      P1:=t1.Create(False);
    end;UNIT2里procedure t1.Execute;
    begin
      FreeOnTerminate:=True;
      {你的代码}
    end;
      

  7.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons;type
      TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm} function ThreadFunc(P: Pointer): LongInt; stdcall;
        var
          i: Integer;
          DC: HDC;
          S: string;
        begin
          DC := GetDC(Form1.Handle);
          SetBkColor(DC, GetSysColor(color_btnface));
          for i := 0 to 100000 do
          begin
            S := IntToStr(i);
            TextOut(DC, 10, 10, PChar(S), Length(S));
          end;
          ReleaseDC(Form1.Handle, DC);
        end;
    procedure TForm1.BitBtn1Click(Sender: TObject);
        var
          hThread: THandle;
          ThreadID: DWord;
        begin
          hthread := CreateThread(nil,   //Security attribute
          0,                             //Initial Stack
          @ThreadFunc,                   //Starting address of thread
          nil,                           //argument of thread
          0,                             // Create flags
          ThreadID);                     // thread ID
          if hthread = 0 then  MessageBox(Handle, 'No Thread', nil, MB_OK);
        end;
    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
    ThreadFunc(nil);
    end;end.