Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.157 c
1-1134663265
_white_
2005-12-15 19:14
2006.01.22
Как реализовать связи как в ERWin


1-1134639425
-=Germe$=-
2005-12-15 12:37
2006.01.22
Sender as ...


14-1135848534
Игорь Шевченко
2005-12-29 12:28
2006.01.22
Как не надо программировать


2-1135753845
Andrey235
2005-12-28 10:10
2006.01.22
Проблема с delphi 6 !!!!!!!


14-1135663849
race1
2005-12-27 09:10
2006.01.22
Word, полоса прокрутки