В моем приложении я хочу выполнить логику в самый последний момент. Чем позже, тем лучше.
Причина этого заключается в том, что я отслеживаю определенные элементы в своем приложении (структуры данных, ресурсы, ...), и в конце приложения подпрограмма просматривает эти элементы и сообщает, если они были неверны закрыто, освобождено, удалено, ...
До сих пор мы делали это, используя несколько уловок.
Первый трюк состоял в отмене функции _heap_term времени выполнения C (и некоторых других функций также во время выполнения C). Преимущество заключалось в том, что это работало очень хорошо, но ограничивалось приложениями, в которых ЭЛТ была статически связана.
Второй трюк состоял в том, чтобы определить глобальную переменную следующим образом:
#pragma init_seg(lib)
GlobalApplicationManager s_globalApplicationManager;
Прагма гарантирует, что эта глобальная переменная создана перед всеми другими глобальными переменными, и - что более важно - что она уничтожена после всех других глобальных переменных.
Таким образом, мы можем поместить проверочную логику в деструктор этого класса.
Проблема в том, что, начиная с Windows 7, деструктор больше не вызывается в некоторых ситуациях. На данный момент неясно, что на это влияет, но мы уверены, что он не вызывается, если мы установим успешное соединение с Oracle в нашем приложении.
Какие еще хитрости существуют для выполнения кода как можно позже в приложении?