描述:
其实想问两个问题?
1.当关闭IE浏览器时,IE浏览器里的activex控件最先收到什么消息?
2.ACTIVEX控件中使用了CSOCKET,当我先断开连接再关闭IE,不会出现异常,当我在通信状态直接关闭IE会出现异常,异常在sockcore.cpp 667行:
661 void CSocket::Close()
662 {
663 if (m_hSocket != INVALID_SOCKET)
664 {
665 CancelBlockingCall();
666
667 VERIFY(AsyncSelect(0));
668 CAsyncSocket::Close();
669 m_hSocket = INVALID_SOCKET;
}
}
这个问题是怎么产生的?
解决方案1:
帮顶混分
解决方案2: 啊,理解错了。
我现在只能想到 你的Activex 中 app的 ExitInstance()函数。
下面是图片地址
http://bbs.wolf.net.cn:8080/attachment.php?s=c856dce2d4b4fdef9027c0385159c9c3&postid=2347370
在wizzard里看了一下,有一个OnQuit事件,:Fired when application is quiting .也许是这个?
还有一个windowclosing 添加这两个事件处理函数,弄两个断点,再调试一下,看是VERIFY先出现,还是先到断点,就可以解决了。
应该是有1个阻塞的socket操作在进行, 所以你不能调用AsyncSelect(0),这个函数是用来取消所有的监听事件的
解决方案6: 应该是
AsyncSelect(0)失败
原因是
WSAEINPROGRESS A blocking Windows Sockets operation is in progress
英文不好,翻译不来。
我在ActiveX中用的是SOCKET API, 封装类的析构函数主动关闭SOCKET就行了, 不用理会ActiveX在IE关闭时收到什么消息。
在高流量中多次测试突然关闭IE,我的代码很稳定。