Перехват ошибок set_terminate

Ну как бы мы классно не программировали и сколько бы сил не тратили все равно программа где-нибудь ошибется. Скажет "Опаньки" операция была некорректная мол и я все закрою. Хотелось чтобы это было не совсем так. То есть, если программа и совершит ошибку, то хоть какие-нибудь действия предпринять по этому поводу.

Когда в программе происходит ошибка, скажем исключение, то вызывается специальная функция обработки этой ситуации. Обычно она просто закрывает программу и все. Но мы можем с Вами перехватить эту функцию и заменить на свою. Для этого есть специальные функции. Одна из них set_terminate.

// eh.h
typedef void (*terminate_function)();
terminate_function set_terminate( terminate_function term_func );

Вот как можно это сделать просто:

#include "stdafx.h"
#include "iostream.h"
#include "eh.h"


void Error()
{
cout << "Error !!!!! " << endl;
}

void main()
{
set_terminate(Error);
throw "df";
cout << "Cancel" << endl;
}

В результате прерывания управление передастся в функцию Error и только потом произойдет закрытие программы. В этот момент можно производить различные действия. Например, сохранение данных.

Сама функция возвращает указатель на предыдущую функцию обработки и его можно сохранить и использовать.

typedef void (*TERMINATE_FN)();
TERMINATE_FN old_terminate = NULL;
......
old_terminate = set_terminate(my_terminate);
......
set_terminate(old_terminate);
 
« Предыдущая статья   Следующая статья »