我创建了一个测试应用程序;我使用Platinum库来实现UPnP协议,我遇到了问题:关闭窗口后进程没有完成,忽略了我尝试使用任务管理器杀死它。我可以在接下来的1-10分钟内查看我的应用程序的幽灵。
调试后我可以说网络代码中存在问题 - 白金代码创建4个线程,用于在网络接口上接收UDP数据包。当我销毁所有库对象并且它们在所有其他线程之后关闭时,此线程不会关闭。 NPT_BsdSocketFd的析构函数中的问题 - 当它调用closesocket()执行时,不会从此函数返回:( 每个线程都有自己的套接字用于接收。
~NPT_BsdSocketFd() {
if (m_Cancellable) {
if (!NPT_BSD_SOCKET_IS_INVALID(m_CancelFds[0])) closesocket(m_CancelFds[0]);
if (!NPT_BSD_SOCKET_IS_INVALID(m_CancelFds[1])) closesocket(m_CancelFds[1]);
}
closesocket(m_SocketFd); //problem here...
}
有谁知道为什么closesocket()执行这么长时间?