我做了个简单的线程,代码如下: 
var 
    Form1:   TForm1; 
    thread1:Tmythread; procedure   TForm1.Button1Click(Sender:   TObject); 
begin 
thread1:=   Tmythread.Create(false); 
end; procedure   TForm1.Button2Click(Sender:   TObject); 
begin 
    thread1.Suspend; 
end; procedure   TForm1.Button3Click(Sender:   TObject); 
begin 
thread1.Resume; 
end; end. 线程的代码: uses 
Messages,   SysUtils,Windows,Variants,   Classes,   Graphics,   Controls,   Forms, 
Dialogs,StdCtrls; type 
    Tmythread   =   class(TThread) 
    private 
        {   Private   declarations   } 
    protected 
        procedure   Execute;   override; 
    end; implementation 
    uses 
      Unit1; procedure   Tmythread.Execute; 
    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; 
end. 
问题是我可以启动线程,但是按下button2挂起线程后程序就不响应了! 
请高手帮下忙,看下我的问题出现在哪里. 
谢谢!

解决方案 »

  1.   

    挂线程是不影响界面的,你试试把Execute随便换点别的代码(我觉得是里面代码问题,因为你的代码要操作界面)看看,还会不会定死呢?如果挂线程就会定界面,那么TThread.Create(true)就可以消失了。另外我不知道你这个线程的用途是怎样,如果想Execute重复执行的话,必须把代码加在循环中(一般是while not terminated do),否则执行一次就结束线程了。此外while里每执行一次,最好加上一个休眠时间,如Sleep(10)。
      

  2.   

    我的代码就是copy你的代码.... -_-点button2的时候,数字停止显示,form可以随意拖动;点button3的时候继续显示。