private
    procedure SyncCall(var Msg: TMessage); message WM_USER;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  SyncCall();//直接调用过程
  //通过消息触发过程
  SendMessage(Handle, WM_USER, Longint(stMessage), Longint(Data));
end;
procedure SyncCall();
begin
end;procedure TForm1.SyncCall(var Msg: TMessage);
begin
end;
以上两种方式有何区别??
1:直接调用过程
2:通过发送消息触发过程
在我的理解是:直接调用和发送消息因为没有用到多线程,都得在执行完了SyncCall函数后才能进行其它操作?
不知道这样理解是否正确?

解决方案 »

  1.   

    单线程作业的Project,大多数情况下不需要使用消息来专门调用某个过程,直接调用就行了,多线程用消息转一下通常是为了告诉界面一些信息,比如作完了,作到30%了,发生错误了等等,好让界面上显示某些信息。
      

  2.   

    发消息会触发WndProc,如果操作不当会导致堵塞,直接调用就只是把它当成一个子处理模块,应该比较快。。