close
Пространства имён
Варианты
Действия

std::at_quick_exit

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Утилиты поддержки программ
Прерывание программы
(C++11)
(C++11)
Недостижимый поток управления
Взаимодействие с окружением
Сигналы
Типы сигналов
Нелокальные переходы
Типы
 
<tbody> </tbody>
Определено в заголовочном файле <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 по at_quick_exit