对于问题一
首先,在MFC中只有继承与CCmdTarget类的对象才拥有消息处理机制,才能接受处理一般消息,只有继承与CWnd类的对象才能够接受Windows消息(WM_COMMAND),比如用户命令。如果你自定义的成员变量不是继承与CCmdTarget类的,它是无法获得消息的,当然不能够处理消息了。
另外,你的线程是用户界面线程还是工作线程,如果是工作线程,它是无法处理用户输入的命令的,比如,按了菜单的命令
先说这些,以后补充

解决方案 »

  1.   

    这个问题我也没有解决!
    但我后来用两种方式解决了这个问题
    1.你可以在类中加一个属性:status,设置不同的常数,表示将要进行什么样处理,然后可以在一
      个线程中循环访问对象队列,访问:status,然后根据status的值做不同的处理!
    2.你可以在住线程中建立要捕获消息的对象实例
      

  2.   

    从情况看来可以尽量少用mfc的相关类,采用下列步骤可以做到:
    1.建立Active Class以封装线程
    2.为每个Active Class建立线程安全的消息buffer(采用信号灯pv操作)
    3.最好不要显式调用SendMessage(windows API)之类的代码,而将向线程发送消息的工作封装在Active Class的方法(外部接口)实现中,如: void Active::PostMsg(const CSelfDefineMsg& x) 
    { p(avail);  //非阻塞消息可以不要注释掉
        p(mutex);
          copy x to buffer;
        v(mutex);
      v(full); //wake up thread of this Active instance
    }
    因为thread有自已的stack所以只要上述方法是thread safe.
      

  3.   

    多谢各位高手相助:
    我现在想这样做:首先从CWinThread类中,派生出线程对象类,CWinThread类是从CCmdTarget类派生来的.所以它可以处理用户发送的自定义消息,在该类中定义对各个自定义信息的处理过程,在系统中定义CWinThread指针类型的数组列表,以保存各个对象的指针,再通过PostThreadMessage()函数向各个对象发送自定义消息.
    不过,我有一点不清楚,从CWinThread类生成的线程对象和使用AfxBeginThread()生成的线程有什么不同?当线程很多时,会不会性能方面的问题?
      

  4.   

    我是新手。
    难道从CWinThread派生的类不需要用AfxBeginThread来启动吗?