我创建了一个单一对话框应用程序,它基本上进行了一系列复杂的计算。该应用程序最初是作为Win32控制台应用程序创建的,后来我决定添加一个进度条,然后我将控制台应用程序转换为基于单一对话框的应用程序。该对话框上有一个进度条。在对话框的OnInitDialog()函数中,我开始计算。计算正在工作线程上运行。该线程是通过调用_beginthreadex函数创建的。通过使用PostMessage将消息发布到对话框,线程更新进度条。线程完成执行后,我调用CDialog :: OnOK()函数关闭对话框。问题是,即使关闭对话框,应用程序也不会立即结束。即使对话框关闭,关闭应用程序也需要将近2秒钟。 任何有助于解决此问题的帮助都非常感谢。 感谢。
答案 0 :(得分:0)
这是因为您的工作线程仍在运行。在所有线程完成运行之前,应用程序不会终止。由于您的UI线程在工作线程之前关闭,因此窗口可能被隐藏,但是在工作线程完成其工作之前,该过程不会终止。
答案 1 :(得分:0)
工作线程可能仍在运行。要确保线程已停止,请使用事件发出信号。当用户按下对话框中的关闭按钮时,您可以发出事件信号以杀死该线程。
您可以检查事件是否在复杂计算中发出信号(可能是一个循环)并从中断。因此停止线程没有任何问题。
while(true)
{
//Some complex task
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
if (WAIT_OBJECT_0 == dwWaitResult)
{
break;
}
}