我创建了一个线程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;
}

解决方案 »

  1.   

    好像与下面段函数有关,把死循环去掉就行了.死循环是不能去的,我应该如何解决呢?各位大牛,有办法吗?代码如下:
    LRESULT Packet::OnPacketReceive(WPARAM w, LPARAM l)
    {
      //,好像问题是在这里,线程里有个死循环,所以接不到消息的,去掉就好了,我应该如果怎么做才能保证线程能收到消息呢
       while(1)
      {
              ...............
             ..................
      }
       return S_OK;
    }
      

  2.   

    CWinThread 不断读取消息队列里的消息, 然后根据msg id 调用相应的处理函数.
    你在处理函数中搞个死循环后, 这个消息队列就象一个迟早要吹爆的气球,只有进气没有出气了.
    线程永远无法去读取新的消息.