4

我在这里也描述了一个问题:http: //www.delphigroups.info/3/9/106748.html

我已经尝试了几乎所有形式的在代码中到处放置 Application->Terminate() 函数,而不是'return 0'、'ExitProcess(0)'、'ExitThread(0)'、exit(0)。没有工作变体关闭应用程序。相反,Application->Terminate() 语句之后的代码正在运行。

我在应用程序中有两个或更多线程。我尝试在执行线程后和主线程中调用终止函数。

此外,这与 CodeGuard / madExcept 无关(据我所知)(我已将其关闭再打开,没有效果)。CodeGuard 转身也没有做成功。

唯一有效的代码变体是将 Application->Terminate() 调用放置到任何表单按钮的 OnClick 处理程序中。但这不符合我的需要。我需要在任何地方终止。

我应该怎么做才能终止 C++ Builder 2010 应用程序中的所有线程,然后终止进程?

4

1 回答 1

3

Application->Terminate()不会立即关闭应用程序,它只会发出您想要关闭应用程序的信号。

Terminate 调用 Windows API PostQuitMessage 函数来执行应用程序的有序关闭。 终止不是立即的。

在您的函数中调用Application->ProcessMessages()然后检查Application->Terminated属性是否为真。

对于使用计算密集型循环的应用程序,定期调用 ProcessMessages,并检查 Terminated 以确定是否中止计算并允许应用程序终止

例如:

void Calc()
{
  for (int x = 0; x < 1000000; ++x)
  {
    // perform complex calculation

    // check if need to exit
    Application->ProcessMessages();
    if (Application->Terminated)
    {
      break;
    } // end if
  } // end for

  // clean up
} 
于 2010-04-21T23:00:57.497 回答