Разница между std :: quick_exit и std :: abort
std :: quick_exit ()
Это вызывает нормальное завершение программы без полной очистки ресурсов.
Синтаксис:
void quick_exit (int exit_code) нет кроме;
В случае выполнения потоков коды становятся сложными, и знание выполнения потоков затруднено. В то время как один поток может ожидать завершения процесса, в то время как другой поток ожидает предыдущего потока. В таких случаях реальные программы обычно блокируются, и выход из них неприятен. Администратор должен принудительно запустить систему или закрыть пользовательский интерфейс и т. Д., Чтобы выйти из-под блокировки. Для этого был создан std :: quick_exit () . Он завершает программу, избавляя нас от сложной части выхода из тупика при выполнении реальной программы. Он очищает ввод-вывод, но не сбрасывает статические деструкторы. Другая функция at_quick_exit ()
int at_quick_exit (void (* func) (void));
принимает функцию в качестве параметра, который должен выполняться при вызове функции quick_exit (). Зарегистрированные для этого функции вызываются в порядке, обратном их выполнению.
#include <cstdlib> void atEXIT () { cout << "Функция быстрого выхода."; } int main () { at_quick_exit (atEXIT); cout << "Основная функция"; quick_exit (0); cout << "Конец основного"; возврат 0; } Выход: основная функция Функция быстрого выхода.
std :: abort ()
Вызывает ненормальное завершение программы, если SIGABRT не перехватывается обработчиком сигнала, переданным в std :: signal, и обработчик не возвращает.
Синтаксис:
void abort () no except;
POSIX указывает, что функция прерывания отменяет блокировку или игнорирование сигнала SIGABRT.
#include <cstdlib> int main () { ФАЙЛ * fp; fp = fopen ("myfile.txt", "r"); если (fp == NULL) { fputs ("Ошибка при открытии файла n", stderr); abort (); } fclose (fp); возврат 0; } Вывод: файл с именем myfile.txt, если он не найден или не открывается по какой-либо причине ошибка сообщение печатается, и функция прерывания завершает программу.
Сходства: обе функции std :: quick_exit () и std :: abort () определены в заголовке cstdlib. Обе эти функции не имеют параметров и исключений. Оба они также не имеют возвращаемого значения. Они используются для завершения программы, но все же отличаются друг от друга.
Различия: причина введения функции quick_exit () заключалась в том, чтобы завершить запущенную программу, очистив ввод-вывод, и при этом получить некоторую часть программы, т.е. функции, зарегистрированные в at_quick_exit (), которые должны быть выполнены, тогда как функция std :: abort () завершается программа без выполнения, кроме того, части программы и без очистки ввода-вывода.