C builder RAD 2010 RTL / VCL Application-> Terminate()函数不终止应用程序

时间:2010-04-21 18:39:19

标签: c++builder vcl rad

我还有一个问题:http://www.delphigroups.info/3/9/106748.html

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

我在应用中有两个或更多线程。我尝试在执行线程和主线程之后调用terminate func。

这与CodeGuard / madExcept(我已关闭并打开,没有效果)无关(据我所知)。 CodeGuard转向也没有成功。

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

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

1 个答案:

答案 0 :(得分:3)

Application->Terminate()不会立即关闭应用程序,它只表示您要关闭应用程序。

  

终止调用Windows API   PostQuitMessage函数执行一个   有序关闭应用程序。   终止不是即时的。

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

  

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

例如:

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
}