Я работаю над приложением MFC, которое можно (среди прочего) использовать для выключения Windows. При этом Windows, конечно же, отправляет WM_QUERYENDSESSION и WM_ENDSESSION всем приложениям, включая мое. Однако проблема в том, что мое приложение в составе некоторых деструкторов удаляет определенные файлы (с помощью CFile::Remove), которые использовались во время выполнения. У меня есть основания полагать, что деструкторы вызываются (но это трудно сказать наверняка), когда приложение закрывается Windows.
Однако, когда Windows снова запускается, я иногда замечаю, что файлы, которые должны были быть удалены, все еще присутствуют. Это не происходит постоянно, даже когда выполнение программы идентично (у меня есть скрипт для проверки этого). Это наводит меня на мысль, что происходит одно из двух: либо а) деструкторы вызываются непоследовательно, либо б) функция удаления возвращается, но файл фактически не удаляется до закрытия Windows.
Единственный обходной путь, который я нашел до сих пор, заключается в том, что если я заставлю систему ждать с выключением примерно 10 секунд после остановки моей программы, то файлы будут правильно удалены. Это наводит меня на мысль, что b) может иметь место.
Я надеюсь, что кто-то сможет помочь мне с этой проблемой.
С уважением Морт