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; } // 输出结果: 

输出结果:

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

运行结果:

如果由于任何原因未找到 myfile.txt 文件或失败,则会打开错误              打印消息并且中止函数终止程序。 
  • 相似之处:std::quick_exit()std::abort() 函数都在 cstdlib 头文件中定义。 这两个函数都没有参数,也没有异常。 它们也没有返回值。 它们用于终止程序,但它们仍然彼此不同。
  • 区别:引入 quick_exit() 函数的原因是在清除 IO 的同时结束正在运行的程序,并且仍然获得程序的某些部分,即在 at_quick_exit() 中注册的函数被执行而 std::abort() 函数终止 该程序不执行程序的其他部分并且不清除 IO。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264218.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论