📜  std::quick_exit 和 std::abort 的区别

📅  最后修改于: 2021-09-10 03:09:12             🧑  作者: Mango

std::quick_exit()

它会导致正常的程序终止而没有完全清理资源。
句法 :

void quick_exit(int exit_code) no except; 

在执行线程的情况下,代码变得复杂并且很难知道线程的执行情况。一个线程可能正在等待进程结束,而另一个线程正在等待前一个线程。在这种情况下,真正的程序通常会死锁并退出,这并不令人愉快。管理员必须强制启动系统或关闭用户界面等才能解除锁定。为此目的,制作了std::quick_exit() 。它终止了程序,使我们免于在执行真实程序时摆脱死锁的困难部分。它清除 IO 但不刷新静态析构函数。另一个函数at_quick_exit()

int at_quick_exit( void (*func)(void) ); 

将函数作为参数,在调用 quick_exit()函数时执行。注册到 this 的函数按其执行的相反顺序调用。

#include 
void atEXIT()
{
  cout << "Quick exit function.";
}
int main ()
{
  at_quick_exit(atEXIT);
  cout << "Main Function";
  quick_exit(0);
  cout << "End of Main"; 
  return 0;
}
 Output:  Main Function
          Quick exit function.    

std::abort()

导致程序异常终止,除非 SIGABRT 被传递给 std::signal 的信号处理程序捕获并且处理程序不返回。
句法:

void abort() no except; 

POSIX 指定 abort函数覆盖阻塞或忽略 SIGABRT 信号。

#include 

int main ()
{
  FILE * fp;
  fp= fopen("myfile.txt", "r");
  if (fp== NULL)
  {
    fputs("Error opening file \n", stderr);
    abort();
  }
  fclose(fp);
  return 0;
}
 Output:  The file named myfile.txt, if not found or fails opens due to any reason the error 
            message is printed and abort function terminates the program.

相似之处: std::quick_exit() 和 std::abort() 函数都在 cstdlib 头文件中定义。这两个函数都没有参数,也没有例外。它们都没有返回值。它们用于终止程序,但它们仍然彼此不同。
区别:引入quick_exit()函数的原因是为了在清除 IO 的同时结束正在运行的程序,并且仍然得到程序的某些部分,即at_quick_exit() 中注册的函数被执行而std::abort()函数终止程序而不执行程序的更多部分并且不清除 IO。

想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程