开一个隐藏的窗口处理CSocket消息

解决方案 »

  1.   

    你程序中CSocket采取事件驱动方式,其可能依附于主窗口的消息泵,你可以另外建立一个CWnd在其中启动CSocket,这样是不会出现消息堵塞的
      

  2.   

    当然可行。如果你用多线程,则移动窗口跟CSocket无关。移动窗口这样的消息跟按个按钮没什么区别,全都是在消息队列中一个个的来处理。
      

  3.   

    我的建议是:在主窗口线程的基础上,再添加两个线程。其中一个用来生成CSocket的实例,控制Socket的运行。另外一个线程则作为主线程与Socket线程之间的通信线程。在通信线程的消息循环中,把主线程的命令POST到Socket线程中,把Socket线程的RESPONSE同样POST到主线程中。这样UI与Socket之间就可以很好地做到互不影响。
      

  4.   

    在开一个GUIthread,在里面生成CSocket对象,这样socket就和GUIthread的窗口对应起来了。
      

  5.   

    是不是CSocket的消息环是含有该CSocket对象的窗口类实例的消息环的子消息环,因而当窗口收到移动窗口之类的消息时,程序一直在处理“switch...case”中的移动窗口消息,而无法跳出“switch...case”进入CSocket的消息泵中?难道Windows程序的消息处理机制不是把不同的消息分发给各自的消息响应函数分别处理的吗?难道消息响应函数也是顺序执行的吗?
      

  6.   


    CSocket本身就是通过一个隐藏窗口来实现的,你只需要重载OnReceive, OnSend就行了。每个线程都有一个消息队列。
      

  7.   


    如果你是在另外一个线程时使用CSocket, 则其不受收到影响。