我创建了一个线程packet,为什么在其他类中向他发送线程消息,却接收不到,但第一个消息怎么发都收得到,第二个消息死活也收不到,发送线程的方法如下:(补充,发消息的地方和线程函数在同一个MFC扩展DLL中)
m_packet->CreateThread();
m_packet->PostThreadMessage(WM_PACKET_STARTCAPTURE, 0, (LPARAM)hdev);
m_packet->PostThreadMessage(WM_PACKET_SEND_PACKET, NULL, NULL);线程类实现和定义如下
//.h
class Packet : public CWinThread
{
DECLARE_DYNCREATE(Packet)public:
Packet();
virtual BOOL InitInstance();
virtual int ExitInstance();
LRESULT OnPacketReceive(WPARAM w, LPARAM l);
}
//.cpp
IMPLEMENT_DYNCREATE(Packet, CWinThread)
Packet::Packet()
{
}Packet::~Packet()
{
}BOOL Packet::InitInstance()
{
return TRUE;
}int Packet::ExitInstance()
{
return CWinThread::ExitInstance();
}BEGIN_MESSAGE_MAP(Packet, CWinThread)
ON_THREAD_MESSAGE(WM_PACKET_STARTCAPTURE, StartCapture)
ON_THREAD_MESSAGE(WM_PACKET_CLOSETHREAD, CloseThread)
ON_THREAD_MESSAGE(WM_PACKET_SEND_PACKET , OnPacketSend)
ON_THREAD_MESSAGE(WM_PACKET_RECEIVE_PACKET, OnPacketReceive)
END_MESSAGE_MAP()LRESULT Packet::OnPacketReceive(WPARAM w, LPARAM l)
{
return S_OK;
}
m_packet->CreateThread();
m_packet->PostThreadMessage(WM_PACKET_STARTCAPTURE, 0, (LPARAM)hdev);
m_packet->PostThreadMessage(WM_PACKET_SEND_PACKET, NULL, NULL);线程类实现和定义如下
//.h
class Packet : public CWinThread
{
DECLARE_DYNCREATE(Packet)public:
Packet();
virtual BOOL InitInstance();
virtual int ExitInstance();
LRESULT OnPacketReceive(WPARAM w, LPARAM l);
}
//.cpp
IMPLEMENT_DYNCREATE(Packet, CWinThread)
Packet::Packet()
{
}Packet::~Packet()
{
}BOOL Packet::InitInstance()
{
return TRUE;
}int Packet::ExitInstance()
{
return CWinThread::ExitInstance();
}BEGIN_MESSAGE_MAP(Packet, CWinThread)
ON_THREAD_MESSAGE(WM_PACKET_STARTCAPTURE, StartCapture)
ON_THREAD_MESSAGE(WM_PACKET_CLOSETHREAD, CloseThread)
ON_THREAD_MESSAGE(WM_PACKET_SEND_PACKET , OnPacketSend)
ON_THREAD_MESSAGE(WM_PACKET_RECEIVE_PACKET, OnPacketReceive)
END_MESSAGE_MAP()LRESULT Packet::OnPacketReceive(WPARAM w, LPARAM l)
{
return S_OK;
}
解决方案 »
- 我实现了在MFC多文档中创建的菜单栏弹出对话框;怎样实现在该对话框中点击按钮在主视图中显示图片
- 如何获得在“我的电脑”空白处鼠标单击右键弹出的菜单(附图)?
- 请教GDI+在PictureControl上画图不刷新的问题
- 为何CreatePen,LineTo等函数会失效?
- 郁闷死了啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 在多文档程序中,关闭所有的文挡?
- 动态链接库能够调用远程服务器组件(com组件)?
- 如何通过mci驱动声卡录音?
- 请教:相同的OpengGL在不同的机器上运行结果为什么不一样呢???
- 菜鸟问题:提供几个能够比较快的播放声音的函数?
- 关于VC2003加载宏的问题, 急~~在线等~~~
- 关于odbc调用带输出参数的存储过程中set nocount on使用的问题
LRESULT Packet::OnPacketReceive(WPARAM w, LPARAM l)
{
//,好像问题是在这里,线程里有个死循环,所以接不到消息的,去掉就好了,我应该如果怎么做才能保证线程能收到消息呢
while(1)
{
...............
..................
}
return S_OK;
}
你在处理函数中搞个死循环后, 这个消息队列就象一个迟早要吹爆的气球,只有进气没有出气了.
线程永远无法去读取新的消息.