Home C&C++函数库 c++ 语法 程序源码 Linux C库

at_quick_exit

函数   <cstdlib>

C11 int at_quick_exit (void (*func)(void));
C++11 extern "C" int at_quick_exit (void (*func)(void)) noexcept;
extern "C++" int at_quick_exit (void (*func)(void)) noexcept;


设置快速退出时要执行的函数

当调用quick_exit时,func所指向的函数将被自动调用(不带参数)。

如果对这个函数的不同调用指定了多个at_quick_exit函数,那么它们都将以相反的顺序执行。

如果在at_quick_exit中注册的函数抛出了一个异常,该异常在被quick_exit调用时没有提供处理程序, 则会自动调用terminate (c++)。

注意,函数的at_quick_exit栈与atexit栈是分开的(每个都由不同的情况触发), 但同一个函数可能被传递给两个函数,以便在两种情况下都被调用。

如果一个注册了atexit的函数抛出了一个异常,当调用终止时它没有提供一个处理程序,terminate会自动调用(c++)。

特定的库实现可能会限制可以用at_quick_exit注册的函数的数量,但不能少于32个。

☲  参数



function
要调用的函数。该函数不返回任何值,也不接受任何参数。

☉  返回值



如果函数成功注册,则返回一个零值。

如果失败,则返回一个非零值。

☣  示例



/* at_quick_exit example */
#include <stdio.h>      /* puts */
#include <stdlib.h>     /* at_quick_exit, quick_exit, EXIT_SUCCESS */

void fnQExit (void)
{
  puts ("Quick exit function.");
}

int main ()
{
  at_quick_exit (fnQExit);
  puts ("Main function: Beginning");
  quick_exit (EXIT_SUCCESS);
  puts ("Main function: End");  // never executed
  return 0;
}


输出:

Main function: Beginning
Quick exit function.

↭  数据竞争



并发地调用这个函数不会引入数据竞争:调用在进程级正确地同步,尽管不同线程调用的相对顺序是不确定的。

在调用quick_exit之前未完成的对at_quick_exit的调用可能不会成功(取决于特定的库实现)。

❆  异常(c++)



无抛出保证:此函数从不抛出异常。

🍄  另请参阅



abort 中止当前进程(function)
atexit 设置退出时要执行的函数(function)
quick_exit 终止呼叫过程快速(function)

联系我们 免责声明 关于CandCplus 网站地图