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

发布于 2024-08-29 09:23:34 字数 611 浏览 7 评论 0原文

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

我尝试了几乎所有形式的将 Application->Terminate() func 放置在代码中的任何位置,而不是“return 0”、“ExitProcess(0)”、“ExitThread(0)” ',退出(0)。没有工作变体会关闭应用程序。相反,Application->Terminate() 语句之后的代码正在运行。

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

此外,这与 CodeGuard / madExcept 无关(据我想象)(我已将其关闭并打开,没有效果)。 CodeGuard的转向也没有成功。

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

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

I have a problem also described here: http://www.delphigroups.info/3/9/106748.html

I have tried almost all forms of placing Application->Terminate() func everywhere in the code, following and not 'return 0', 'ExitProcess(0)', 'ExitThread(0)', exit(0). No working variant closes the app. Instead the code after Application->Terminate() statement is running.

I have two or more threads in the app. I tried calling terminate func in created after execution threads and in main thread.

Also this is not related (as far as I can imagine) with CodeGuard / madExcept (I have turned it off and on, no effect). CodeGuard turning also did not do success.

The only working code variant is to place Application->Terminate() call to any of any form button's OnClick handler. But this does not fit in my needs. I need to terminate in any place.

What I should do to terminate all the threads in C++ Builder 2010 application and then terminate the process?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小镇女孩 2024-09-05 09:23:34

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

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

在您的函数中调用 Application->ProcessMessages() 然后检查应用程序->终止 属性为 true。

对于使用的应用程序
计算密集型循环,调用
定期处理消息,以及
还要检查终止以确定
是否中止计算以及
允许应用程序终止

例如:

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
} 

Application->Terminate() does not close application immediately, it only signals you want to close the application.

Terminate calls the Windows API
PostQuitMessage function to perform an
orderly shutdown of the application.
Terminate is not immediate.

In your functions call Application->ProcessMessages() then check if the Application->Terminated property is true.

For applications using
calculation-intensive loops, call
ProcessMessages periodically, and
also check Terminated to determine
whether to abort the calculation and
allow the application to terminate

For example:

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
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文