Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

Приложение не дает выключить комп.   Найти похожие ветки 

 
Sky   (2005-11-07 15:07) [0]

При стандартном ручном закрытии приложения никаких проблем нет. Проблемы при попытке перезагрузить систему с активным приложением. Ловлю WM_QUERYENDSESSION, в нем делаю FORMCLOSE.  Приложение честно гаснет. Форточки не гаснут. Вот и получается, что юзер вынужден дважды гасить систему - сначала гаснет приложение, со второй попытки - система. Где грабли?


 
umbra ©   (2005-11-07 15:28) [1]


> Ловлю WM_QUERYENDSESSION, в нем делаю FORMCLOSE
>


а зачем? винда сама приложение закроет.


 
Leonid Troyanovsky ©   (2005-11-07 15:45) [2]


> Sky   (07.11.05 15:07)  
> приложение, со второй попытки - система. Где грабли?


Неправильный обработчик сообщения.
См. какой result передается inherited.

--
Regards, LVT.


 
Sky   (2005-11-07 15:46) [3]

В том и дело, что не закрывает. Если не ловить WM_QUERYENDSESSION, то приложение вообще не закрывается. Ситуация похожая на работу с Tray. Но в этом приложении нестандартных компонентов нет :(


 
Sky   (2005-11-07 15:47) [4]

message.result := integer(true)


 
Leonid Troyanovsky ©   (2005-11-07 15:51) [5]


> Sky   (07.11.05 15:47) [4]
> message.result := integer(true)


Где весь обработчик?
И что происходит в FormClose.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2005-11-07 16:00) [6]


> Sky   (07.11.05 15:46) [3]
> В том и дело, что не закрывает. Если не ловить WM_QUERYENDSESSION,
>  то приложение вообще не закрывается.


Ошибка в FormClose/FormCloseQuery.
Скорее всего, стоит что-то типа  action := caNone.

--
Regards, LVT.


 
Sky   (2005-11-07 16:01) [7]

Обработчик -

procedure TMainTCPForm.WMQueryEndSession(var Mes: TWMQueryEndSession);
begin
mes.Result:=integer(true);
inherited;
close;
end;

procedure TMainTCPForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//стоп таймера перерисовки формы
timer1.Enabled:=false;
//гасится два потока
PUDP^.Terminate;
PUDP^.WaitFor;
PTCP^.Terminate;
PTCP^.WaitFor;
//закрывается сокет
netform.ServerSock.Close;
//сохраняется текущее состояние
savestatus;
end;

Ничего необычного...


 
Sky   (2005-11-07 16:09) [8]

Вручную задал Action:=caFree; не помогло :(
Кстати, еще одно: при активном приложении последовательность Пуск->Завершение->Перезагрузка выгружает приложение, но не винду, если после этого приложение запустить снова и повторить Пуск->Завершение->Перезагрузка, то глушится и приложение и винда. В мозгах ничего не остается, проверено.


 
Leonid Troyanovsky ©   (2005-11-07 16:25) [9]


> Sky   (07.11.05 16:01) [7]


> mes.Result:=integer(true);
> inherited;
> close;
> end;

 Здесь не место Close, тем более с таким отягощением.
 Можешь попробывать PostMessage(Handle, WM_CLOSE, 0, 0).
 Хотя, в любом случае, окно получит его позже.
 Здесь место лишь таким вещам, как FCanClose := True.

> //стоп таймера перерисовки формы

Что за таймер "перерисовки формы"?

> PTCP^.WaitFor;

Почему WaitFor?

> //закрывается сокет
> netform.ServerSock.Close;

Что за сокет, что за netform?

> //сохраняется текущее состояние
> savestatus;

Сохранить состояние можно и раньше, хоть в OnCloseQuery.

Мне, вообще, не очень верится, что оное приложение
беспроблемно закрывается даже в штатном режиме.

--
Regards, LVT.


 
Sky   (2005-11-07 16:32) [10]


>  Здесь не место Close, тем более с таким отягощением

Согласен. Но без этого вообще приложение не закрывается при попытке перезагрузки.
> Что за таймер "перерисовки формы"?

Раз в секунду перерисовывает часть обьектов на форме.
> Почему WaitFor?

Дык... Дождаться завершения потока... А что, туплю?
> Что за сокет, что за netform?

Обычный TServerSocket на дочерней форме.
> Мне, вообще, не очень верится, что оное приложение
> беспроблемно закрывается даже в штатном режиме.

Точно. Прислать, к сожалению, не могу :)


 
Sky   (2005-11-07 16:37) [11]


> Сохранить состояние можно и раньше, хоть в OnCloseQuery.

Вообще я пробовал в OnCloseQuery весь обработчик FormClose перетащить,  FormClose вообще отсутствовал - никакого эффекта, все то же самое.


 
Leonid Troyanovsky ©   (2005-11-07 16:43) [12]


> Sky   (07.11.05 16:32) [10]


> >  Здесь не место Close, тем более с таким отягощением

> Согласен. Но без этого вообще приложение не закрывается
> при попытке перезагрузки.

Оно не закрывается, потому как оно не может завершится нормально.
Что происходит при надавливании на крестик главной формы?
В отладчике смотреть, в отладчике.

> > Почему WaitFor?

> Дык... Дождаться завершения потока... А что, туплю?

А оно надо - дожидаться. Что там такого ценного?

> Обычный TServerSocket на дочерней форме.

stNonBlocking?
Чем он занят? Как реагирует на закрытие?

> > Мне, вообще, не очень верится, что оное приложение
> > беспроблемно закрывается даже в штатном режиме.

> Точно. Прислать, к сожалению, не могу :)

Отладчик, отладчик и еще раз отладчик.
Когда будет закрываться без проблем,
тогда и все остальное получится.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2005-11-07 16:50) [13]


> Sky   (07.11.05 16:37) [11]

> > Сохранить состояние можно и раньше, хоть в OnCloseQuery.

> Вообще я пробовал в OnCloseQuery весь обработчик FormClose
> перетащить,  FormClose вообще отсутствовал - никакого эффекта,
>  все то же самое.


А что тоже самое? Если вызывать Close в WMQueryEndSession,
то, конечно.

Однако, повторюсь, проблема не в WMQueryEndSession.
Твое приложение закрывается некорректно.

--
Regards, LVT.


 
Sky   (2005-11-08 10:17) [14]


> Твое приложение закрывается некорректно.

Разобрался. Все закрывается корректно. Просто есть компонент - NMUDP, который и не отпускал приложение. Пришлось его вручную в FORMCLOSE задестроить и все пошло. В качестве проверки соорудил тестовое приложение с единственной формой, на которой был единственный NMUDP. Ни строчки кода, UDP-компонент никак не настраивался даже. И это приложение не дает завершить систему. Плиз, проверьте меня кто-нибудь, если подтвердится - значит баг Борланда.


 
Leonid Troyanovsky ©   (2005-11-08 11:37) [15]


> Sky   (08.11.05 10:17) [14]

> > Твое приложение закрывается некорректно.

> компонент никак не настраивался даже. И это приложение не
> дает завершить систему. Плиз, проверьте меня кто-нибудь,
>  если подтвердится - значит баг Борланда.


Это баг NetMasters.
Кстати, хоть и контрол левый, приложение-то, все равно, твое.

--
Regards, LVT.


 
Sky ©   (2005-11-09 11:09) [16]


> Это баг NetMasters.

Не согласен, поскольку

> хоть и контрол левый, приложение-то, все равно, твое.

Раз компонент входит в стандартный пакет Борланда, то он и в ответе :)
Хоть баг и редкий, imho, достоин занесения на скрижали, об него мозги свернуть можно.


 
Leonid Troyanovsky ©   (2005-11-09 14:16) [17]


> Sky ©   (09.11.05 11:09) [16]

> > Это баг NetMasters.

> Не согласен, поскольку


 Для оных компонентов (ocx, IMHO), есть свои соглашения о
 распространении и т.п.

> Раз компонент входит в стандартный пакет Борланда, то он и в ответе :)

Конечно, они провинились, что до сих пор не выкинули их на свалку.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.061 c
1-1134480593
Reset
2005-12-13 16:29
2006.01.22
Поиск компонента и выяснение его свойств...


11-1116963540
sormy
2005-05-24 23:39
2006.01.22
Сохранить все позиции ListBox a, а затем их вернуть как?


2-1135984359
ilifant
2005-12-31 02:12
2006.01.22
integer()


2-1136144676
KvORubin
2006-01-01 22:44
2006.01.22
Как запретить и перехватить выход из программы верхним крестиком?


1-1134988402
КодеКорешь
2005-12-19 13:33
2006.01.22
Как узнать сколько эзепляров данной формы уже создано





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский