std::at_quick_exit
| Определён в заголовке <cstdlib>
|
||
int at_quick_exit( /*atexit-handler*/* func ) noexcept;
int at_quick_exit( /*c-atexit-handler*/* func ) noexcept;
|
(1) | (начиная с C++11) |
extern "C++" using /*atexit-handler*/ = void();
extern "C" using /*c-atexit-handler*/ = void();
|
(2) | (только для демонстрации*) |
Регистрирует функцию, на которую указывает func, для вызова при быстром завершении программы (через std::quick_exit).
Вызов функции из нескольких потоков не приводит к состоянию гонки. Гарантируется, что реализация поддерживает регистрацию как минимум 32 функций. Точное ограничение определяется реализацией.
Зарегистрированные функции не будут вызываться при нормальном завершении программы. Если функция должна быть вызвана в этом случае, необходимо использовать std::atexit.
Параметры
| func | - | указатель на функцию, вызываемую при быстром завершении программы |
Возвращаемое значение
0 если регистрация прошла успешно, в противном случае - ненулевое значение.
Примечания
Две перегрузки различаются, потому что типы параметра
func
различны (
языковая привязка
является частью его типа).
Пример
#include <cstdlib> #include <iostream> void f1() { std::cout << "pushed first" << std::endl; // flush is intentional } extern "C" void f2() { std::cout << "pushed second\n"; } int main() { auto f3 = [] { std::cout << "pushed third\n"; }; std::at_quick_exit(f1); std::at_quick_exit(f2); std::at_quick_exit(f3); std::quick_exit(0); }
Вывод:
pushed third pushed second pushed first
Смотрите также
|
вызывает аварийное завершение программы (без очистки)
(функция) |
|
|
вызывает нормальное завершение программы с очисткой
(функция) |
|
|
регистрирует функцию для вызова при
std::exit()
вызове
(функция) |
|
|
(C++11)
|
вызывает быстрое завершение программы без полной очистки
(функция) |
|
Документация C
для
at_quick_exit
|
|