我创建了一个基本上执行一系列复杂计算的单个对话框应用程序。该应用程序最初是作为Win32控制台应用程序创建的,后来我决定添加一个进度条,然后将控制台应用程序转换为基于单个对话框的应用程序。该对话框上有一个进度条。在对话框的OnInitDialog()函数中,我开始计算。计算在工作线程上运行。这个线程是通过调用_beginthreadex函数创建的。线程通过使用PostMessage将消息发布到对话框来更新进度条。线程完成执行后,我调用CDialog :: OnOK()函数关闭对话框。问题是,即使关闭对话框后,应用程序也不会立即结束。即使关闭对话框,也需要将近2秒才能关闭应用程序。 任何帮助解决这个问题,高度赞赏。 谢谢。MFC线程问题 - 在所有线程完成后,程序不会结束
0
A
回答
0
这是因为您的工作线程仍在运行。在所有线程完成运行之前,应用程序不会终止。由于您的UI线程在工作线程之前关闭,所以窗口可能被隐藏,但该进程在工作线程完成其工作之前不会终止。
0
工作线程可能仍在运行。为了确保线程停止使用事件发信号。当用户按下对话框中的关闭按钮时,可以发信号通知事件以杀死线程。
您可以检查事件是否在复杂计算(可能是循环)中发出信号并从中断。因此停止线程没有任何问题。
while(true)
{
//Some complex task
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
if (WAIT_OBJECT_0 == dwWaitResult)
{
break;
}
}
+0
不,情况并非如此。我所有的工作线程都结束了。问题是内存泄漏。无论如何感谢您的时间 – Ram 2012-02-21 18:49:11
相关问题
- 1. 仍然有问题结束线程
- 2. 当所有后台线程池线程完成时都会收到通知
- 3. 线程在结束线程循环之前没有完成任务
- 4. 等待所有工作线程结束
- 5. 等待线程结束的问题
- 6. 如何让主线程等待所有子线程完成?
- 7. 永不结束后台线程?
- 8. 主线程不会等待另一个线程完成执行
- 9. Java多核线程 - 线程未结束
- 10. 如何等待所有线程完成?
- 11. 试图等待所有线程完成
- 12. 使用循环屏障不会等到所有线程完成
- 13. 仅在线程结束后继续
- 14. 会在子线程完成执行之前退出主线程?
- 15. 在线程完成时从线程移除线程
- 16. C#多线程在任何其他线程完成后添加线程
- 17. 如何确保后台线程在应用程序结束时结束?
- 18. 如何在线程完成后清理线程?
- 19. 执行完所有程序后在程序结束时发生seg故障?
- 20. MFC项目中的线程问题
- 21. 如何在完成所有线程后关闭ProgressDialog?
- 22. 如何等待所有后台线程完成(在C#中)?
- 23. 在Python中完成所有指令后停止线程
- 24. Java多线程等待线程完成
- 25. 多线程程序在完成之前就冻结
- 26. ExecutorService,如何知道所有线程何时完成而不阻塞主线程?
- 27. 谁在完成后通知线程?
- 28. 问题在程序执行的线程
- 29. 如何为线程在MFC中完成时添加事件处理程序?
- 30. 在循环中创建线程并等待所有线程完成/中止
对话框关闭后在调试器中击中。调试器打破哪些代码?什么线程是活动的? – usr 2012-02-20 20:16:15
应用程序退出后(如调试版本)VisualStudio的“输出”选项卡上是否存在任何内存泄漏?这可能也需要一段时间。 – Clemens 2012-02-20 20:24:28
@ xml-tools:是的,你是对的。有一些内存泄漏报告。我会研究它们并尝试修复它们。谢谢。 – Ram 2012-02-21 18:48:06