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
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指定中止函数重写阻止或忽略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。