我写了如下代码,运行结果却很有问题,请前辈们指点!谢谢!
运行结果如下GIF动画
var
  Form1: TForm1;
  procedure MsgBox();
implementation
procedure MsgBox();begin
  ShowMessage('info');
end;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
    lpThreadId: DWORD;
    hThread:LongInt;
begin
     hThread:=Windows.CreateThread(nil,0,Pointer(@MsgBox),nil,0,lpThreadId);
     CloseHandle(hThread);
end;end.

解决方案 »

  1.   

    CreateThread 要使用的函数是系统级别的,并且有严格的格式(参数、返回值),必须按格式来; 
    因为是系统级调用, 还要缀上 stdcall.而你的是一个过程
      

  2.   

    应该写成下面那样:function MsgBox(p: Pointer): Integer; stdcall;implementationfunction MsgBox(p: Pointer): Integer; 
    begin
      ShowMessage('info');
      Result := 0;
    end;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
        lpThreadId: DWORD;
        hThread:LongInt;
    begin
         hThread:= CreateThread(nil,0,@MsgBox,nil,0,lpThreadId);
         CloseHandle(hThread);
    end;end.
      

  3.   

    另外不建议用CreateThread来创建线程,改为用TThread。因为DELPHI对线程进行了封装,在创建线程的时候,有初始化一些全局变量,具体可以参考System的BeginThread,贴出代码:function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
      ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
      var ThreadId: LongWord): Integer;
    var
      P: PThreadRec;
    begin
      New(P);
      P.Func := ThreadFunc;
      P.Parameter := Parameter;
      IsMultiThread := TRUE;
      Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
        CreationFlags, ThreadID);
    end;
      

  4.   

    嗯~~ SHOWMESSAGE 也是个问题,呵呵~~~可以改成这样
    function MsgBox(p: Pointer): Integer;
    begin
      Application.MessageBox('info','msg',64);
      Result := 0;
    end;
      

  5.   

    路过,,学习一下,,VC里曾经接触过线程,,也曾经遇过这样的问题,,
    现在开始学习DELPHI,,不知道要什么样的基础