csocket和多线程不容,你用sdk吧.

解决方案 »

  1.   

    不要在线程间传递MFC对象,用Handle来做。
    CSocket内建了一个窗体,而对于每个窗体要调用
    AfxSocketInit()的。最好在线程里建立一个socket,
    实在要这么写的话,要这样:
    UINT SendData(LPVOID Param)
    {
        CXXXDlg* pDlg = (CXXXDlg*)Param;
        ...
        AfxSockInit();
        CSocket* pSocket = new CSocket();
        pSocket->FromHandle(pDlg->m_pSocket->m_hSocket);
        pSocket->Create();
        ...
        delete pSocket;
        
        return 0L;
    }
      

  2.   

    这样好象不行因为我在线程中用
        pSocket->FromHandle(pDlg->m_pSocket->m_hSocket);时返回是空(pDlg->m_pSocket->m_hSocket)不空!
    请教各位高手到底是什么原因,难道csocket类不支持线程吗?!
      

  3.   

    没可能吧,这样子我用过的,居然不行?
    要不:
    UINT SendData(LPVOID Param)
    {
        CXXXDlg* pDlg = (CXXXDlg*)Param;
        ...
        AfxSockInit();
        CAsyncSocket* pSocket = new CAsyncSocket();
        pSocket->Attach(pDlg->m_pSocket->m_hSocket);
        pSocket->Create();
        ...
        pSocket->Detach();
        delete pSocket;
        
        return 0L;
    }
      

  4.   

    没可能吧,这样子我用过的,居然不行?
    要不:
    UINT SendData(LPVOID Param)
    {
        CXXXDlg* pDlg = (CXXXDlg*)Param;
        ...
        AfxSockInit();
        CAsyncSocket* pSocket = new CAsyncSocket();
        pSocket->Attach(pDlg->m_pSocket->m_hSocket);
        pSocket->Create();
        ...
        pSocket->Detach();
        delete pSocket;
        
        return 0L;
    }