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