【发布时间】:2014-01-20 21:43:36
【问题描述】:
如果我在调用Connect 之后但在调用OnConnect 回调之前删除CAsyncSocket,CAsyncSocket 会使我的应用程序崩溃。 ASSERT(pSocket != NULL) 在CAsyncSocket::DoCallBack 中失败,应用程序退出。
换句话说,如果我创建一个CAsyncSocket,尝试将其连接到服务器,然后在连接成功或失败之前将其终止,我就会遇到问题。我可以通过实现OnConnect 并设置一个指示连接尝试已完成的标志来避免这种特殊的崩溃。如果标志为假,我知道删除是不安全的。
在删除对象之前是否需要检查其他情况?有没有一种方法可以检查它是否安全?或者我是否需要为我可能启动的任何操作(OnReceive、OnSend、OnConnect)实现所有回调并确保已调用这些回调?
【问题讨论】:
-
不能先关闭再删除吗?
-
当然可以,但是析构函数调用了 Close,所以我不确定这会比简单地删除它更好。
-
你是对的。我什至找不到任何方法来取消未完成的操作。但必须有办法干净利落地做到这一点。
-
CAsyncSocket类的实例的方法是从不同的线程调用的吗?
标签: c++ windows sockets mfc casyncsocket