就我现在知道创建线程(暂时只说单线程)的方法有2个。
1、首先当然是打开你的delphi 6 ,点取菜单栏中的文件-新建-其它,弹出一个标签窗口,选取new标签,然后找到Thread Object,就是它了,双击它就行了,弹出一个类命名窗口,输入mythread,当然名称可由你自已来定的。这时程序自动创建一个unit2,在这个里面编写
procedure mythread.Execute;
begin
  { Place thread code here }
end;
然后在unit1里面引用thread的这个单元,mythread.Create(false);就可以执行拉。2、另外一个方法是写一个函数
//这是线程函数,
它可以放在下面程序的任何地方
function MyThreadFunc(P:pointer):Longint;stdcall;
var
   i:integer;
   DC:HDC;
   S:string;
begin
     DC:=GetDC(Form1.Handle);
     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.UsedThreadClick(Sender: TObject);
var
   hThread:Thandle;//定义一个句柄
   ThreadID:DWord;
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
     if hThread=0 then
messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);
end;==================================================================
我的问题如下:
两种方法有什么区别啊?大家可以讨论一下。谢谢!!!

解决方案 »

  1.   

    前者是Delphi包装过的,后者调用的是Windows API。Delphi包装过的线程类要在操作系统中运行线程最终也会调用操作系统的API,但Delphi包装过后,用起来更方便,逻辑性更强,也更符合OOP的思想。
      

  2.   

    那么我在2方法中的线程函数中使用[下面标记段落里]function MyThreadFunc(P:pointer):Longint;stdcall;
    var
       i:integer;
       DC:HDC;
       S:string;
    begin
         DC:=GetDC(Form1.Handle);
         for i:=0 to 100000 do begin
             S:=Inttostr(i);
             Textout(DC,10,10,Pchar(S),length(S));
             if i=5000 then 
                  begin
                     ReleaseDC(Form1.Handle,DC);
                     exit;      //请问这里结束函数,同时线程就结束了么????还是有其他方法
                  end;
         end;
         ReleaseDC(Form1.Handle,DC);
    end;
      

  3.   

    怎么在线程里使用DLL里面的函数和过程啊????????????
      

  4.   

    exit;      //请问这里结束函数,同时线程就结束了么????还是有其他方法
    对,线程就结束了!
    DLL中的函数直接调用就OK
    如你上面的例子,GetDC实际上就是操作系统的GDI32.dll里面的函数