请问关于线程间通信(50分)

  • 主题发起人 主题发起人 norlon
  • 开始时间 开始时间
N

norlon

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何实现线程间通信?
之前以为可以用windows的消息,但是刚才试了下好像不行。
我是这么尝试的,一个主线程和一个工作线程,主线程通过sendmessage向工作线程发消息,工作线程如果接收到消息,则showmessage。但是在运行时发现工作线程根本没反应,不知道是为什么。是不是不能通过向线程发信息进行通信,有什么其他的通信方式,谢谢!
 
使用PostThreadMessage函数。
 
刚试了,还是一样。
下面是接收消息的代码
const
MY_MSG = WM_USER + 700 ;
procedure GetMsg(var Msg: Tmessage);message MY_MSG;
procedure TDrawThread.GetMsg(var Msg: Tmessage);
begin
showmessage('sdfsdf');
end;
 
没有人帮忙吗,我想这个问题应该很多人都遇到过吧
 
看了一下msdn的帮助,用postthreadmessage方法发送消息,返回值是0,这表示发送消息失败,然后调用Getlasterror获得错误代号,发现返回值也是0,这又表示调用成功,真是奇怪了。
 
ThreadMsg: TMsg;
// 标准消息结构体
if PeekMessage(ThreadMsg, 0, 0, 0, PM_REMOVE) then
// 取到消息
 
谢谢!
请问if PeekMessage(ThreadMsg, 0, 0, 0, PM_REMOVE) then
// 取到消息
这句应该放在什么地方,ThreadMsg的定义又应该放在什么地方。还有发送消息处的代码应该如何写。
我把if 句放在工作线程的execute函数里,不断的循环,好像还是没有收到消息。
 
线程在默认的情况下是不会建立消息循环的所以你给它发消息它也不会处理的,如果想要线程接受并处理消息,你需要帮助它建立消息循环,前些天我也在查着方面的资料。我可以查一下,可以查到很多的。
 
帮顶!
http://www.source520.com
站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载
http://www.source520.com/search/search.asp
"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
如果说线程没有消息循环的话,那么一般传递信息的方式是什么呢。
难道通过全局变量?
 
同意陌生
PostThreadMessage后线程写个消息循环
while GetMessage(Msg, 0,0,0)do
begin
case Msg.Message of
xxx:;
end;
end;

google:delphi postthreadmessage getmessage
google:delphi postthreadmessage peekmessage
 
怎么看不到回复??????
 
同意陌生 和 jlutt-sadan
 
后退
顶部