std::at_quick_exit
| Definiert im Header <cstdlib>
|
||
int at_quick_exit( /*atexit-handler*/* func ) noexcept;
int at_quick_exit( /*c-atexit-handler*/* func ) noexcept;
|
(1) | (seit C++11) |
extern "C++" using /*atexit-handler*/ = void();
extern "C" using /*c-atexit-handler*/ = void();
|
(2) | (nur zur Veranschaulichung*) |
Registriert die Funktion, auf die func zeigt, sodass sie bei schneller Programmbeendigung (über std::quick_exit) aufgerufen wird.
Der Aufruf der Funktion aus mehreren Threads führt zu keiner Datenkonkurrenz. Es wird garantiert, dass die Implementierung die Registrierung von mindestens 32 Funktionen unterstützt. Das genaue Limit ist implementationsdefiniert.
Die registrierten Funktionen werden bei normaler Programmbeendigung nicht aufgerufen. Wenn eine Funktion in diesem Fall aufgerufen werden muss, muss std::atexit verwendet werden.
Parameter
| func | - | Zeiger auf eine Funktion, die beim schnellen Programmabbruch aufgerufen wird |
Rückgabewert
0 wenn die Registrierung erfolgreich ist, andernfalls ein Wert ungleich Null.
Hinweise
Die beiden Überladungen sind unterschiedlich, weil die Typen des Parameters
func
unterschiedlich sind (
Sprachverknüpfung
ist Teil seines Typs).
Beispiel
#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); }
Ausgabe:
pushed third pushed second pushed first
Siehe auch
|
verursacht abnormale Programmbeendigung (ohne Bereinigung)
(Funktion) |
|
|
verursacht normale Programmbeendigung mit Bereinigung
(Funktion) |
|
|
registriert eine Funktion, die beim Aufruf von
std::exit()
aufgerufen werden soll
(Funktion) |
|
|
(C++11)
|
verursacht schnelle Programmbeendigung ohne vollständige Bereinigung
(Funktion) |
|
C-Dokumentation
für
at_quick_exit
|
|