各位大哥些,请进来看一看啊,多线程的问题

waterandtree 2005-10-19 04:51:19

//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#define WM_MYMSG WM_USER+1
//---------------------------------------------------------------------------
class Record : public TThread
{
private:
protected:
void __fastcall Execute();
public:
__fastcall Record(bool CreateSuspended);
void __fastcall AnswerMSG(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MYMSG, TMessage, AnswerMSG)
END_MESSAGE_MAP(TThread);
};
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall Record::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------

__fastcall Record::Record(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Record::Execute()
{
//---- Place thread code here ----
for(int i=100;i<200;i++)
{
if (i==110)
{
PostMessage((void *)this->Handle,WM_MYMSG,0,100);
break;
}
}
}
//---------------------------------------------------------------------------
void __fastcall Record::AnswerMSG(TMessage &Message)
{
if(Message.LParam==100)
{
//
//
}

}


各位大哥。。我这个线程里面怎么拦截不到本线程发出的消息啊?
这个函数AnswerMSG得不到执行?
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterandtree 2005-10-20
  • 打赏
  • 举报
回复
感谢FengSC(小猪快跑)和 pp616(傻小子):
我懂了。。
第一种方法是创建一个隐式的窗口。。利用窗口的消息循环
第二中方法是自己建立一个线程的消息循环。。。
pp616 2005-10-19
  • 打赏
  • 举报
回复
少打个字符PostThreadMessage(YouThreadID(注意是ID不是Handle),Msg,0,0);
pp616 2005-10-19
  • 打赏
  • 举报
回复
TThread的Handle不是窗口句柄 根本收不到消息的。也没有消息循环。
要在线程中收消息可以用上面说的AllocateHWnd也就是对CreateWindow封装了一下。其实就是创建了一个窗口利用这个窗口的句柄来收消息

还可以线程内自己写个消息循环如:
MSG *Msg=(MSG *)malloc(sizeof(MSG));
while (!Terminated)
{
try
{
if (PeekMessage(Msg, 0, 0, 8092, PM_REMOVE))
{
switch (Msg->message)
{
case youmsg:
//code......
break;
}
}
}
catch(...){};
}

线程外用PostThreadMessage(YouThreadID(注意是ID不是Handle,Msg,0,0);
FengSC 2005-10-19
  • 打赏
  • 举报
回复
this->Handle是不能收到消息的,如果确实需要这样应用,可以用AllocateHWnd函数创建一个HWND,主要DeallocateHWnd

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧