AddTerminateProc - C++ Builder

C++ Builder 参考手册System::SysutilsAddTerminateProc


头文件:#include <System.SysUtils.hpp>
命名空间:System::Sysutils
函数原型:

void __fastcall AddTerminateProc(TTerminateProc TermProc);

参数:

TermProc:要添加的在程序退出时询问是否可以退出的函数,这个参数是 TTerminateProc 类型的函数指针,即没有参数,返回值为 bool 类型的 __fastcall 调用约定的函数,函数返回 true 表示可以退出,返回 false 表示不可以退出。

返回值:

无。

  • 程序正常退出时,先执行 AddTerminateProc 添加的函数,如果这些函数都允许退出,即全部返回 true,再执行其他的退出过程,例如 std::atexit 和全局变量的析构函数等;如果这些函数当中只要有一个函数返回 false,就会取消退出动作;
  • std::exitstd::abort 结束进程,都不会调用 AddTerminateProc 添加的函数。

以下为程序测试结果:

  • 在 Windows 操作系统正常关机的情况下,即选择开始菜单里面的 “关机”,会调用 AddTerminateProc 添加的函数,如果弹出对话框,停在了这些函数里面,操作系统会提示这个程序阻止了关机,是否取消关机:如果取消关机,可以看到弹出的对话框,继续操作;如果选择了继续关机,进程被结束,操作系统关机;
  • 在 Windows 操作系统正常关机的情况下,即选择开始菜单里面的 “关机”,会调用 AddTerminateProc 添加的函数,这些函数直接返回了 false 阻止程序退出,没有弹出对话框,操作系统忽略返回值,直接关机;
  • 在 Windows 任务管理器里面结束任务的时候,虽然调用了这些函数,但是进程也被结束了,无论是否弹出对话框,忽略这些函数的执行和返回值。

例子:测试通过关闭主窗口、Application->Terminate(); 和 std::exit(); 退出程序时是否执行了 AddTerminateProc 添加的函数,以及 AddTerminateProc 添加的函数的执行效果。

bool __fastcall TermProc1(void)
{
    return Application->MessageBox(L"是否退出?", L"退出", MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION)==IDYES;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Sysutils::AddTerminateProc(TermProc1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    std::exit(EXIT_SUCCESS);
}

运行结果:

  • 通过窗口右上角的 “×” 关闭主窗口;
  • 点击按钮 Button1 通过 this->Close(); 关闭主窗口;
  • 点击按钮 Button2 通过 Application->Terminate(); 结束应用程序;
    都执行了 AddTerminateProc 添加的函数 TermProc1。
  • 点击按钮 Button2 通过 std::exit(); 结束进程;
    没有执行 AddTerminateProc 添加的函数 TermProc1。
  • 点击 TermProc1 函数弹出的对话框的 “否” 按钮,函数返回 false,程序不退出;
  • 点击 TermProc1 函数弹出的对话框的 “是” 按钮,函数返回 true,程序退出。
运行结果

相关:


C++ Builder 参考手册System::SysutilsAddTerminateProc