【问题标题】:When is it safe to close CAsyncSocket?什么时候关闭 CAsyncSocket 是安全的?
【发布时间】:2014-01-20 21:43:36
【问题描述】:

如果我在调用Connect 之后但在调用OnConnect 回调之前删除CAsyncSocketCAsyncSocket 会使我的应用程序崩溃。 ASSERT(pSocket != NULL)CAsyncSocket::DoCallBack 中失败,应用程序退出。

换句话说,如果我创建一个CAsyncSocket,尝试将其连接到服务器,然后在连接成功或失败之前将其终止,我就会遇到问题。我可以通过实现OnConnect 并设置一个指示连接尝试已完成的标志来避免这种特殊的崩溃。如果标志为假,我知道删除是不安全的。

在删除对象之前是否需要检查其他情况?有没有一种方法可以检查它是否安全?或者我是否需要为我可能启动的任何操作(OnReceiveOnSendOnConnect)实现所有回调并确保已调用这些回调?

【问题讨论】:

  • 不能先关闭再删除吗?
  • 当然可以,但是析构函数调用了 Close,所以我不确定这会比简单地删除它更好。
  • 你是对的。我什至找不到任何方法来取消未完成的操作。但必须有办法干净利落地做到这一点。
  • CAsyncSocket类的实例的方法是从不同的线程调用的吗?
  • 相关问题:CAsyncSocket::Close Crashes.

标签: c++ windows sockets mfc casyncsocket


【解决方案1】:
猜你喜欢
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2010-10-26
相关资源
最近更新 更多