2010-04-21 99 views
4

我这里还描述了一个问题:http://www.delphigroups.info/3/9/106748.html用C++ Builder 2010 RAD RTL/VCL应用程序 - >终止()函数不终止应用程序

我已经尝试了几乎所有形式将应用程序 - >终止()FUNC随处可见在代码中,不是'return 0','ExitProcess(0)','ExitThread(0)',退出(0)。没有工作变体关闭应用程序。相反,Application-> Terminate()语句之后的代码正在运行。

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

这与CodeGuard/madExcept(我已将它关闭并打开,没有任何影响)无关(据我所能想象)。 CodeGuard车削也没有成功。

唯一的工作代码变体是将Application-> Terminate()调用放到任何窗体按钮的OnClick处理函数中。但这不符合我的需求。我需要在任何地方终止。

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

回答

3

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

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

在你的函数调用Application->ProcessMessages()然后检查Application->Terminated属性为true。

对于使用 计算密集型循环应用,呼叫 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 
} 
+0

但是应该满足什么条件?我等待应用程序关闭约2分钟,什么也没有发生。 – ergey 2010-04-22 06:16:42

+1

我发现真正终止我的程序在任何地方的唯一方法是调用这些序列: FormDestroy(); //还有我放在这里的任何内存空闲块 TerminateProcess(GetCurrentProcess(),0) – ergey 2010-04-24 10:00:21

+0

@ergey我用一个例子扩展了我的答案。 – stukelly 2010-04-28 13:03:59