代码如下:      
procedure    test;      
begin      
 showmessage('OK');      
end;      
   
procedure    TForm1.Button1Click(Sender:    TObject);      
var      
 hthread:thandle;      
 thid:dword;      
begin      
 hthread:=beginthread(nil,0,@test,nil,0,thid);      
 if    hthread=0    then      
     showmessage('Failed');      
end;      
但在点button1的时候报错说project2.exe    raised    exception    class    EInvalidOperation    with    message    'Canvas    does    not    allow    drawing'.    Process    stopped.Use    step    or    Run    to    coninue。      
请问这是什么原因呢?      
而且好像我每次重新打开这个工程并运行的时候说可以的,但第二次又不行了,请问该如何解决呢?谢谢

解决方案 »

  1.   

    代码如下:      
    procedure    test;      
    begin      
     showmessage('OK');      
    end;      
       
    procedure    TForm1.Button1Click(Sender:    TObject);      
    var      
     hthread:thandle;      
     thid:dword;      
    begin      
     hthread:=beginthread(nil,0,@test,nil,0,thid);      
     if    hthread=0    then      
         showmessage('Failed');      
    end;      
    但在点button1的时候报错说project2.exe    raised    exception    class    EInvalidOperation    with    message    'Canvas    does    not    allow    drawing'.    Process    stopped.Use    step    or    Run    to    coninue。      
    请问这是什么原因呢?      
    而且好像我每次重新打开这个工程并运行的时候说可以的,但第二次又不行了,请问该如何解决呢?谢谢
      

  2.   

    在Delphi里面,你就继承TThread类就可以了,没有什么特殊的需要不要直接
    调用API吧.毕竟人家封装好的东西,用起来比较的方便,Delphi里面的Help
    说的也多.
      

  3.   

    http://expert.csdn.net/Expert/topic/1241/1241698.xml?temp=.4673426HThread : Handle ;
    ThreadID : DWord ;
    HThread:=CreateThread(nil,0,@ThreadFuncName,nil,0,ThreadID);ThreadFuncName : 线程函数一个贴子还是两个 ? 这样真不行吗 ?
      

  4.   

    procedure test;
    begin
      MessageBox(0,'a','a',0);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
      var
        ThreadID : DWord ;
    begin
      CreateThread(nil,0,@test,nil,0,ThreadID);
    end;
      

  5.   

    代码如下:      
    procedure    test;      
    begin      
      MessageBox(Application.Handle,'OK','OK',MB_OK); 
    end;      
       
    procedure    TForm1.Button1Click(Sender:    TObject);      
    var      
     hthread:thandle;      
     thid:dword;      
    begin      
     hthread:=CreateThread(nil,0,@test,nil,0,thid);     // 
     if    hthread=0    then      
         showmessage('Failed');      
    end;