我用CSocket写通信程序,但执行到下面的函数时总出错,是什么原因?
是多线程通信,每个线程创建了一个套接字:CMySocket *m_pClientSocket = New CMySocket;
然后在OnSendSocket函数中调用:m_pClientSocket->Send(str,len);
如果消息很少,或者中间有Sleep,则没有错误,否则必然出现ASSERT(pState->m_hSocketWindow != NULL);的错误。
听说
1 是一个Bug,我用VC 5.0也打了sp5,
2 同一个套接字不能在不同的线程传输,但是我每一个线程创建了一个单独的套接字
3 没有调用AfxSockInit(),但是我在每个线程的初始化中都调用了这个函数。
现在实在没有办法解决,请大家帮忙,感谢!
下面的函数是 .../MFC/SRC/SOCKCORE.CPP 里的函数。
BOOL CSocket::PumpMessages(UINT uStopFlag)
{
// The same socket better not be blocking in more than one place.
ASSERT(m_pbBlocking == NULL);
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
ASSERT(pState->m_hSocketWindow != NULL); //这句出错这句出错这句出错这句出错
BOOL bBlocking = TR
关于mfc下多线程socket出错
在MFC环境下使用多线程CSocket进行通信时遇到错误,问题出现在`ASSERT(pState->m_hSocketWindow != NULL);`。微软指出此问题通常由于CSocket对象在多个线程间共享导致,因为CSocket对象的SOCKET句柄和通知窗口是按线程存储的。解决方案是确保每个线程有自己的CSocket实例,避免线程间共享。
摘要由CSDN通过智能技术生成
问?: