Завершение программы при выходе из системы или 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 не работает все равно. Мало того что не работает, так еще и подвисает при выходе. Сейчас опять буду е****я что бы работало везде.

Related:

4 Responses to “Завершение программы при выходе из системы или EVT_QUERY_END_SESSION нам не всегда друг”

  1. Удалось полностью решить проблему?

  2. Неа:) Думал что победил. Решил просто сохранять данные – не пытаясь себя закрыть. У меня под XP, а также под виртальной вистой и W2К работало все. Зарелизил
    .
    Теперь выяснилось что под реальной двушкой все плохо – при шатдауне программа спрашивает пользователя “можно ли мне закрытся”… Не могу понять почему, вот сегодня буду ковырятся.

  3. в коментах написано, что уже пофиксали, но в старые версии фикс не перенесут, чтобы чужие воркэроунды не ломать.
    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.

  4. угу, я сейчас слежу за дискуссией в майл листе.
    Вообщем похоже винда прибивает процесс сразу после возврата из 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 и не пытатся закрыть приложение, все равно не получается.