再问结束异步WinInet回调函数的问题。。

饿半肚 2012-03-16 04:01:44
之前发过一个帖子——
http://topic.csdn.net/u/20120207/18/035b61a9-5999-49bf-9eab-994e8086b8fc.html

就是当需要终止网络操作时,如果异步的回调函数不结束,那么在那个回调函数里将会引用到一些已经销毁的变量,导致程序崩溃。我现在已经按之前那个帖子去结束那个回调函数了,但不知道为什么现在不成功。

从日志看来,我已经替换了全部internet句柄的回调函数,也把所有internet句柄都关掉了——

InternetSetStatusCallback(m_hRequestLast, NULL); // 返回0x00a71a40,GetLastError() == 0
InternetSetStatusCallback(m_hConnLast, NULL); // 返回0x00a71a40,GetLastError() == 0
InternetSetStatusCallback(m_hInternetLast, NULL); // 返回0x00a71a40,GetLastError() == 0
……
InternetCloseHandle(hRequest); // 返回TRUE,GetLastError() == 0
InternetCloseHandle(hConn); // 返回TRUE,GetLastError() == 0
InternetCloseHandle(hInternet); // 返回TRUE,GetLastError() == 0

但是在这之后,依然打出了回调函数里面的日志,也就是说,回调函数还在发生作用,然后引用到已经销毁的变量时,就崩溃了。
请问应该怎样可以结束那个回调函数的调用?谢谢!
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
饿半肚 2012-03-16
  • 打赏
  • 举报
回复
已经试验过了,确实是自己的疏忽了。对的,关闭句柄确实不能结束回调的,只有InternetSetStatusCallback(xxx,NULL)才行。
饿半肚 2012-03-16
  • 打赏
  • 举报
回复
额。。抱歉抱歉。。估计是自己失误。在上传下载的请求里没有记录internet句柄,所以结束的时候没结束到上传下载的,不好意思 = =
zwfgdlc 2012-03-16
  • 打赏
  • 举报
回复
理论上是正常的.
因为设置了回调函数就会以异步方式执行.
你关闭句柄时,函数还没执行完毕.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧