多线程如何进行消息的传递(10分)

  • 主题发起人 主题发起人 yb_1014
  • 开始时间 开始时间
Y

yb_1014

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用了多个线程,希望在多个线程之间实现消息的传递,不知道该如何处理,请各位高手指教。
 
PostThreadMessage(TreadID,WM_USER,0,0);
 
如何获得每个线程的id呀,如果要将一个线程的变量值传递到另一个线程该如何处理,谢谢
 
在线程里面通讯应该用PostThreadMessage来代替PostMessage
我写了一个例子供参考
一个form 两个线程类TReceiveThread和TSendThread
在form中定义
var
ReceiveHandle,ReceiveHandle:Thandle;
AReceiveThread:TReceiveThread;
ASendThread:TSendThread;
const
WM_MYMESSAGE=WM_USER+101;

AReceiveThread:=TReceiveThread.Create(false);
Receivehandle:=AReceiveThread.ThreadID;
ASendThread:=TSendThread.Create(false);
Sendhandle:=ASendThread.ThreadID;

在TSendThread的Execute中写入
PostThreadMessage(Receivehandle,WM_MYMESSAGE,0,0);
在TReceiveTHread的published定义
procedure ReceiveMessage(var Msg:TMessage);Message WM_MYMESSAGE;
procedure TReceiveThread.ReceiveMessage(var Msg:TMessage);
var
i:integer;
begin
MessageBox(self.Handle,PChar('收到消息'),PChar('收到消息'),mb_Ok);
end;

在Execute中写入
var
Msg:TMsg;
DMsg: TMessage;
begin
{ Place thread code here}
// while truedo
while not Terminateddo
begin
Sleep(10);
// 释放CPU资源
if PeekMessage(Msg,0,0,0,PM_REMOVE) then
begin
DMsg.Msg:=Msg.message;
DMsg.wParam:=Msg.wParam;
DMsg.lParam:=Msg.lParam;
DMsg.Result:=0;
Dispatch(DMsg);
end;
end;
 
后退
顶部