MFC线程问题 - 程序在所有线程完成后都不会结束

时间:2012-02-20 19:24:21

标签: multithreading mfc

我创建了一个单一对话框应用程序,它基本上进行了一系列复杂的计算。该应用程序最初是作为Win32控制台应用程序创建的,后来我决定添加一个进度条,然后我将控制台应用程序转换为基于单一对话框的应用程序。该对话框上有一个进度条。在对话框的OnInitDialog()函数中,我开始计算。计算正在工作线程上运行。该线程是通过调用_beginthreadex函数创建的。通过使用PostMessage将消息发布到对话框,线程更新进度条。线程完成执行后,我调用CDialog :: OnOK()函数关闭对话框。问题是,即使关闭对话框,应用程序也不会立即结束。即使对话框关闭,关闭应用程序也需要将近2秒钟。 任何有助于解决此问题的帮助都非常感谢。 感谢。

2 个答案:

答案 0 :(得分:0)

这是因为您的工作线程仍在运行。在所有线程完成运行之前,应用程序不会终止。由于您的UI线程在工作线程之前关闭,因此窗口可能被隐藏,但是在工作线程完成其工作之前,该过程不会终止。

答案 1 :(得分:0)

工作线程可能仍在运行。要确保线程已停止,请使用事件发出信号。当用户按下对话框中的关闭按钮时,您可以发出事件信号以杀死该线程。

您可以检查事件是否在复杂计算中发出信号(可能是一个循环)并从中断。因此停止线程没有任何问题。

while(true)
{
  //Some complex task

   DWORD dwWaitResult;
   dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
   if (WAIT_OBJECT_0 == dwWaitResult)   
   {
        break;                  
   }
}