使用CSocket和CWinThread无法解决的ASSERT(pThreadState->m_hSocketWindow != NULL);的两个有关问题
使用CSocket和CWinThread无法解决的ASSERT(pThreadState->m_hSocketWindow != NULL);的两个问题。
按照http://support.microsoft.com/kb/140527/en-us的解决方法如下:
void CTransmitServerDlg::ProcessPendingAccept()
{
CServerToClientSocket* pSocket = new CServerToClientSocket();
if (m_pListenSocket.Accept(*pSocket))
{
CClientThread* pClientThread =(CClientThread*)AfxBeginThread(RUNTIME_CLASS(CClientThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
pClientThread-> hConnected = pSocket-> Detach(); //SOCKET hConnected;在CClientThread中定义
pClientThread-> ResumeThread();
}
}
BOOL CClientThread::InitInstance()
{ pClientSocket-> Attach(hConnected); }
但是还是有这个错误,不知道为什么?
同时在服务器退出,运行到pClientThread-> pClientSocket-> Close();在这里出现异常:
void PASCAL CAsyncSocket::KillSocket(SOCKET hSocket, CAsyncSocket* pSocket)
{
ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL);
这两个问题这么了好久,请高手帮忙解答,如果分数不够解决后另外给分,多谢。
------解决方案--------------------
不要用MFC干这个,改用WINSOCK的API。
------解决方案--------------------
我也遇到过同样的问题,你可以用如下的方法来试试:
首先在CClientThread类中放置一个你的ClientSocket对象,也就是把你的hConnected句柄换成对象,然后通过以下语句来设置:
......
server.Accept((CSocket&)m_ClientSocket);
pClientThread-> m_ThreadSocket=&m_ClientSocket;
pClientThread-> m_ThreadSocket-> Attach(m_ClientSocket.Detach(),FD_READ|FD_CLOSE);
.......
------解决方案--------------------
http://support.microsoft.com/kb/175668/en-us
How to pass a socket connection between threads in an MFC application in Visual C++
按照http://support.microsoft.com/kb/140527/en-us的解决方法如下:
void CTransmitServerDlg::ProcessPendingAccept()
{
CServerToClientSocket* pSocket = new CServerToClientSocket();
if (m_pListenSocket.Accept(*pSocket))
{
CClientThread* pClientThread =(CClientThread*)AfxBeginThread(RUNTIME_CLASS(CClientThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
pClientThread-> hConnected = pSocket-> Detach(); //SOCKET hConnected;在CClientThread中定义
pClientThread-> ResumeThread();
}
}
BOOL CClientThread::InitInstance()
{ pClientSocket-> Attach(hConnected); }
但是还是有这个错误,不知道为什么?
同时在服务器退出,运行到pClientThread-> pClientSocket-> Close();在这里出现异常:
void PASCAL CAsyncSocket::KillSocket(SOCKET hSocket, CAsyncSocket* pSocket)
{
ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL);
这两个问题这么了好久,请高手帮忙解答,如果分数不够解决后另外给分,多谢。
------解决方案--------------------
不要用MFC干这个,改用WINSOCK的API。
------解决方案--------------------
我也遇到过同样的问题,你可以用如下的方法来试试:
首先在CClientThread类中放置一个你的ClientSocket对象,也就是把你的hConnected句柄换成对象,然后通过以下语句来设置:
......
server.Accept((CSocket&)m_ClientSocket);
pClientThread-> m_ThreadSocket=&m_ClientSocket;
pClientThread-> m_ThreadSocket-> Attach(m_ClientSocket.Detach(),FD_READ|FD_CLOSE);
.......
------解决方案--------------------
http://support.microsoft.com/kb/175668/en-us
How to pass a socket connection between threads in an MFC application in Visual C++