zoukankan      html  css  js  c++  java
  • MFC CSocket的跨线程问题

    VC:断言ASSERT(pState->m_hSocketWindow != NULL);

    CSocket断言错误:ASSERT(pState->m_hSocketWindow != NULL);

    起因:在套接字处于连接或者发送状态时,试图关闭套接字,于是在这个断言语句处发生中断。

    原因分析::

    微软官方解释如下:http://support.microsoft.com/kb/140527/en-us

    This assertion failure occurs because the CSocket object was either created or accepted in the context of another thread. The socket notification window was created in a different thread, and the m_hSocketWindow for the current thread is NULL, thus the assertion failure.

    明白了,我就是跨线程使用CSocket,结果。。。。

    解决方案:

    As already mentioned, a CAsyncSocket object should be used only in the context of a single thread. If you need to switch the thread that is accessing a SOCKET connection with another thread, then you should use a separate CAsyncSocket object in each thread, and use the Detach and Attach functions to attach the CAsyncSocket object to the SOCKET handle in the thread that is about to use the socket. Use this sequence:

    1.
    Use Detach() to detach the CAsyncSocket object from the SOCKET handle in the thread that is currently using the CAsyncSocket object.

    2.
    Use Attach() to attach a different CAsyncSocket object to the SOCKET handle while in the context of the MFC UI thread in which you wish to begin accessing the SOCKET connection.

  • 相关阅读:
    在移动端实现常按事件
    HBuilder的一些常用快捷键
    如何在vue里面调用高德地图
    js中获取当前时间
    vux使用方法
    模糊搜索的用法
    Vue-随笔小记
    常用到的一些事件
    java对接东华医疗数据库
    tomcat设置jdk路径
  • 原文地址:https://www.cnblogs.com/hcfalan/p/1962488.html
Copyright © 2011-2022 走看看