(1)在App中new 了个CSocket作为全局变量gpSocket.
(2)首先Create,然后Connect到服务器。
(3)然后接受数据。同时发送数据。出现如下问题:在另外一个UI线程中调用Close的时候出错,巾帼调试,发现出错的地方如下:
BOOL CAsyncSocket::AsyncSelect(long lEvent)
{
ASSERT(m_hSocket != INVALID_SOCKET);
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
ASSERT(pState->m_hSocketWindow != NULL);//出错的地方,也即是说wnd为空的。 return WSAAsyncSelect(m_hSocket, pState->m_hSocketWindow,WM_SOCKET_NOTIFY, lEvent) != SOCKET_ERROR;
}其中,AsyncSelect被CSocket::Close调用,具体代码如下:
void CSocket::Close()
{
if (m_hSocket != INVALID_SOCKET)
{
CancelBlockingCall(); VERIFY(AsyncSelect(0));
CAsyncSocket::Close();
m_hSocket = INVALID_SOCKET;
}
}请问我的具体问题在哪里,是否合多线程有关系,为什么,如何解决?在线等待,谢谢!
(2)首先Create,然后Connect到服务器。
(3)然后接受数据。同时发送数据。出现如下问题:在另外一个UI线程中调用Close的时候出错,巾帼调试,发现出错的地方如下:
BOOL CAsyncSocket::AsyncSelect(long lEvent)
{
ASSERT(m_hSocket != INVALID_SOCKET);
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
ASSERT(pState->m_hSocketWindow != NULL);//出错的地方,也即是说wnd为空的。 return WSAAsyncSelect(m_hSocket, pState->m_hSocketWindow,WM_SOCKET_NOTIFY, lEvent) != SOCKET_ERROR;
}其中,AsyncSelect被CSocket::Close调用,具体代码如下:
void CSocket::Close()
{
if (m_hSocket != INVALID_SOCKET)
{
CancelBlockingCall(); VERIFY(AsyncSelect(0));
CAsyncSocket::Close();
m_hSocket = INVALID_SOCKET;
}
}请问我的具体问题在哪里,是否合多线程有关系,为什么,如何解决?在线等待,谢谢!
我现在的做法是在app中创建此CSocket,然后在其他UI线程中使用它。比如说Create,Connect,Close等等。按照您的意思,是否意味一个线程中创建的CSocket智能在此线程中使用,比如Create,Connect, Close等等?
ASSERT(pState->m_hSocketWindow != NULL);//出错的地方,也即是说wnd为空的。也就说和句柄没有关系,只和窗口有关系呀!
我认为这个肯定和线程有关,但是现在问题到底在哪里,如何解决?
有些简单的方法做到这个吗?