问题: 多线程如何进行消息的传递 ( 积分: 10 )
分类: 多线程
来自: yb_1014, 时间: 2004-04-13 22:42:00, ID: 2557235
我使用了多个线程,希望在多个线程之间实现消息的传递,不知道该如何处理,请各位高手指教。
来自: TYZhang, 时间: 2004-04-13 22:59:26, ID: 2557251
PostThreadMessage(TreadID,WM_USER,0,0);
来自: yb_1014, 时间: 2004-04-14 13:00:52, ID: 2558387
如何获得每个线程的id呀,如果要将一个线程的变量值传递到另一个线程该如何处理,谢谢
来自: 寻路, 时间: 2004-04-14 13:12:08, ID: 2558417
在线程里面通讯应该用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;
来自: 寻路, 时间: 2004-06-22 13:48:13, ID: 2676255
给分!
来自: delp, 时间: 2004-06-22 14:18:24, ID: 2676308
同意楼上,应该给分.
来自: xuebao_zx, 时间: 2004-12-07 16:24:57, ID: 2921679
顶一下
问题讨论没有结束 ...