AddTerminateProc - C++ Builder

C++ Builder 參考手冊 ? System::Sysutils ? AddTerminateProc


頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
函數(shù)原型:

void __fastcall AddTerminateProc(TTerminateProc TermProc);

參數(shù):

TermProc:要添加的在程序退出時詢問是否可以退出的函數(shù),這個參數(shù)是 TTerminateProc 類型的函數(shù)指針,即沒有參數(shù),返回值為 bool 類型的 __fastcall 調(diào)用約定的函數(shù),函數(shù)返回 true 表示可以退出,返回 false 表示不可以退出。

返回值:

無。

  • 程序正常退出時,先執(zhí)行 AddTerminateProc 添加的函數(shù),如果這些函數(shù)都允許退出,即全部返回 true,再執(zhí)行其他的退出過程,例如 std::atexit 和全局變量的析構(gòu)函數(shù)等;如果這些函數(shù)當(dāng)中只要有一個函數(shù)返回 false,就會取消退出動作;
  • std::exitstd::abort 結(jié)束進程,都不會調(diào)用 AddTerminateProc 添加的函數(shù)。

以下為程序測試結(jié)果:

  • 在 Windows 操作系統(tǒng)正常關(guān)機的情況下,即選擇開始菜單里面的 “關(guān)機”,會調(diào)用 AddTerminateProc 添加的函數(shù),如果彈出對話框,停在了這些函數(shù)里面,操作系統(tǒng)會提示這個程序阻止了關(guān)機,是否取消關(guān)機:如果取消關(guān)機,可以看到彈出的對話框,繼續(xù)操作;如果選擇了繼續(xù)關(guān)機,進程被結(jié)束,操作系統(tǒng)關(guān)機;
  • 在 Windows 操作系統(tǒng)正常關(guān)機的情況下,即選擇開始菜單里面的 “關(guān)機”,會調(diào)用 AddTerminateProc 添加的函數(shù),這些函數(shù)直接返回了 false 阻止程序退出,沒有彈出對話框,操作系統(tǒng)忽略返回值,直接關(guān)機;
  • 在 Windows 任務(wù)管理器里面結(jié)束任務(wù)的時候,雖然調(diào)用了這些函數(shù),但是進程也被結(jié)束了,無論是否彈出對話框,忽略這些函數(shù)的執(zhí)行和返回值。

例子:測試通過關(guān)閉主窗口、Application->Terminate(); 和 std::exit(); 退出程序時是否執(zhí)行了 AddTerminateProc 添加的函數(shù),以及 AddTerminateProc 添加的函數(shù)的執(zhí)行效果。

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);
}

運行結(jié)果:

  • 通過窗口右上角的 “×” 關(guān)閉主窗口;
  • 點擊按鈕 Button1 通過 this->Close(); 關(guān)閉主窗口;
  • 點擊按鈕 Button2 通過 Application->Terminate(); 結(jié)束應(yīng)用程序;
    都執(zhí)行了 AddTerminateProc 添加的函數(shù) TermProc1。
  • 點擊按鈕 Button2 通過 std::exit(); 結(jié)束進程;
    沒有執(zhí)行 AddTerminateProc 添加的函數(shù) TermProc1。
  • 點擊 TermProc1 函數(shù)彈出的對話框的 “否” 按鈕,函數(shù)返回 false,程序不退出;
  • 點擊 TermProc1 函數(shù)彈出的對話框的 “是” 按鈕,函數(shù)返回 true,程序退出。
運行結(jié)果

相關(guān):


C++ Builder 參考手冊 ? System::Sysutils ? AddTerminateProc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容