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++)
无抛出保证:此函数从不抛出异常。
🍄 另请参阅