Завершение программы при выходе из системы или EVT_QUERY_END_SESSION нам не всегда друг
April 8th, 2008 Begemot Posted in Oбщее
Полюбуйтесь на это – http://sourceforge.net/tracker/index.php?func=detail&aid=1428691&group_id=9863&atid=109863 . Багу больше 2x(!) лет, тянется еще с прошлого стабильного релиза. До сих пор не пофиксен. Status: Open. А ведь есть специальные события даже EVT_QUERY_END_SESSION и EVT_END_SESSION
Потратил полдня включая\выключая комп что бы найти приемлимый порядок команд для того что бы заставить его корректно выходить при выключении компа и сохранять настройки. И вчера уже собираясь выложить первую бету народу, обнаружил что под win2K не работает все равно. Мало того что не работает, так еще и подвисает при выходе. Сейчас опять буду е****я что бы работало везде.
April 10th, 2008 at 10:24 am
Удалось полностью решить проблему?
April 10th, 2008 at 11:51 am
Неа:) Думал что победил. Решил просто сохранять данные – не пытаясь себя закрыть. У меня под XP, а также под виртальной вистой и W2К работало все. Зарелизил
.
Теперь выяснилось что под реальной двушкой все плохо – при шатдауне программа спрашивает пользователя “можно ли мне закрытся”… Не могу понять почему, вот сегодня буду ковырятся.
April 16th, 2008 at 10:12 pm
в коментах написано, что уже пофиксали, но в старые версии фикс не перенесут, чтобы чужие воркэроунды не ломать.
Date: 2008-04-15 16:36
Sender: vadzProject
Should be fixed in r53186 of the trunk. I won’t backport this in 2.8 as
people could have their own code to deal with this problem there already
and this could result in some unintended (but bad) interaction with it.
April 17th, 2008 at 4:45 am
угу, я сейчас слежу за дискуссией в майл листе.
Вообщем похоже винда прибивает процесс сразу после возврата из OnEndSession, так что кто неуспел тот опаздал:)
И еще у народа получается интересная последовательность вызовов:
I tested the code (realy log off/shut down system) and works fine.
The call stack:
MyApp::MyApp
MyFrame::MyFrame
MyApp::OnQueryEndSession
MyFrame::OnClose
MyApp::OnEndSession
MyApp::OnExit
MyFrame::~MyFrame
А я расчитывал что OnExit вызывается после деструктора окна… вообщем пока там бардак – самое лучше это руками все сохранять в MyApp::OnQueryEndSession и не пытатся закрыть приложение, все равно не получается.