所以,这就是问题所在:
我编写了一个包装类,为 libtorrent c++ 库提供了简化的 API。它(包装器)有一个堆栈分配的成员,它是 libtorrent 的主要会话对象。该库本身使用 boost 框架,以及它的线程特性——它是多线程的。(我必须说我对 boost 不是很熟悉。)
现在,我想创建一个简单的基于 MFC 对话框的应用程序,它有几个按钮用于管理会话、进度条等。
libtorrent 会话的析构函数可能需要一段时间才能完成(因为它需要通知跟踪器它正在关闭)。退出时会提示用户使用 MessageBox 确认下载终止,因此我认为将包装器对象作为应用程序类的成员而不是 CDialog (包装器析构函数,因此会话将启动)是个好主意在对话框关闭后)。Libtorrent 文档还指出,在调用析构函数之前关闭诸如窗口之类的 UI 是个好主意。
有趣的部分来了——一切正常,直到我关闭对话框。该过程继续存在几秒钟,然后因一些与提升相关的锁/关键部分的东西而崩溃(这是调试器指向的地方,在提升的标头之一中进行了一些锁定/释放调用)......
编辑
似乎在关闭时,从主窗口执行了一些线程检查,并且它进入了一些“不规则”状态,在这种状态下它做了一些导致提升失败的事情。我在想gui线程需要某种“加入”,以等待其他线程终止......
如果有人理解我在这里试图解释的内容,并且知道我做错了什么,或者有这个概念的替代解决方案,我将非常感激。
谢谢。