【问题标题】:Main thread closed while the worker thread not finished主线程关闭,而工作线程未完成
【发布时间】:2013-09-13 16:47:14
【问题描述】:

在 MFC 项目中,我的主线程专注于对话框。另一个工作线程专注于从服务器接收数据,解析数据并将数据更新到数据库中。

来自服务器的数据非常庞大。所以我在工作线程未完成时通过单击关闭按钮来破坏对话框。但是工作线程不是独立的。当我删除主线程中创建的对象时,工作线程无法继续,也就是说。一些错误,例如访问冲突问题。 (因为工作线程使用了 xxxxdialog 类中的成员变量)。

我创建线程的方式是AfxBeginThread,我用的是waitforsingleobject的方法,还是不行……

我不想强行杀死工作线程,否则会导致内存泄漏...

【问题讨论】:

  • 所以,在对话框被销毁之前,需要关闭工作线程。这通常通过设置事件并等待线程句柄来完成。线程必须定期检查事件状态并在事件发出信号时立即退出。
  • 也许你不应该在工作线程的对话框类中使用成员变量,那么。分离 GUI 和逻辑。
  • 非常感谢,我解决了问题...

标签: c++ multithreading mfc


【解决方案1】:

您应该在 maindlg 被销毁之前安全地终止工作线程。

这是答案 [Terminating a thread gracefully not using TerminateThread()]

【讨论】:

  • 我之前尝试过那个方法,不知怎么的,我不知道怎么回事,主线程会卡在WaitForSingleObject方法的循环中,永远不会去执行工作线程......我不知道为什么,所以我很...
  • WaitLoop 中是否有 Sleep()?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2011-06-05
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多