CSocket ::在我的MFC应用程序中创建抛出异常

bud*_*ddy 1 c++ mfc pageheap

我的应用程序(VC MFC)运行gflags启用Pageheap以跟踪页面堆损坏.

现在应用程序崩溃并显示此错误,我无法解释这些行(除了感觉资源的可用性)

任何人都可以了解造成应用程序崩溃的原因究竟是什么?

(info:应用程序是一个多线程的应用程序,在多处理器计算机中运行大约500个线程)

kernel32!RaiseException+53 
msvcrt!_CxxThrowException+36 
mfc42u!AfxThrowResourceException+19 
mfc42u!AfxRegisterWndClass+ab 
mfc42u!CAsyncSocket::AttachHandle+5c 
mfc42u!CAsyncSocket::Socket+25 
mfc42u!CAsyncSocket::Create+14 
Run Code Online (Sandbox Code Playgroud)

小智 6

同样的问题让我疯了但最后我修好了它并且它正在发挥作用.这是MFC套接字库的错误,当在一个线程[除了主应用程序线程]之外,如果我们尝试做类似的事情

CSocket socket;
socket.Create();
Run Code Online (Sandbox Code Playgroud)

它会引发一个未处理的异常.我发现了一篇关于它的文章了解微软对此的评价

那些来自微软的东西,但这也没有帮助我.所以这是我找到的解决方法,我希望它可以帮助像我这样的沮丧的家伙.

在线程内部,执行此操作

CSocket mySock;
SOCKET sockethandle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
mySock.m_hSocket= sockethandle;
Run Code Online (Sandbox Code Playgroud)

之后不要调用mySock.Create,因为已经通过分配套接字句柄创建了它.我不确定我们是否可以使用mySock.Attach(sockethandle),因为我还没有尝试过.

之后,您可以直接致电Connect等.

当你完成使用套接字时,不要调用mySock.Close()- 而是调用closesocket(mySock.m_hSocket);并释放套接字对象.如果Attach在上面的情况下工作,那么我想我们需要在这里做Detach来释放套接字.

祝好运