std::at_quick_exit
Материал из cppreference.com
<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++11) |
вызывает быстрое завершение программы без полной очистки (функция) |
Документация C по at_quick_exit
| |