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

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

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()函数时执行。注册到该函数的函数将按与其执行顺序相反的顺序调用。

#include <cstdlib>
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 <cstdlib>

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。

让我们用表格的形式来看看它们的区别:

序号 std:: quick_exit std::中止
1. 它在头文件<cstdlib>中定义 它在头文件<cstdlib>中定义
2. 它的语法是-: Quick_exit (int exit_code) 它的语法是-: abort ();
3. 它只接受一个参数 它不接受任何参数。
4. 它的返回值是void。 它的返回值是void。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程