Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программа не завершается


Страницы:   1 2

Savek ©   (2008-10-29 16:28:00) 

Программа клиент, которая подключается к серверу приложений (сокеты) не дает перезагрузить или выключить компьютер. Т.е. виндоус не может завершить её работу, хотя при нажатии на красн. крестик программа корректно завершает свою работу. Также программа завершает работу если послать ей сообщение

PostMessage(FindWindow(nil, 'BaseForm'), WM_Close, 0, 0);

из др. программы. Опытным путём установлено, что казус проявляются после того как импортируется интерфейс сервера

comNakl:=INumber3Disp(cnnSvrNakl.GetServer);
здесь INumber3Disp - interface(IDispatch) сервера
        cnnSvrNakl - TSocketConnection

Ситуация непонятная. Помоготе прояснить


Leonid Troyanovsky   (2008-10-31 16:40:00) [1]


> Savek   (31.10.08 15:36) [23]

> Всё-таки нужно сымитировать запрос виндовс на закрытие программы,
>  а то слишком геморно перезагружать комп постоянно...

Логоф спасет ОРД.

--
Regards, LVT.


Leonid Troyanovsky   (2008-10-31 16:35:00) [2]


> Savek   (29.10.08 16:28)  

> после того как импортируется интерфейс сервера

Посмотри winsight32 or spy+ какие окна появляются после импорта.
Если, например, это (невидимое) окно верхнего уровня, то оно может
возвращать 0 на WM_QUERYENDSESSION.

Лечить можно установкой хука WH_CALLWNDPROC и закрытием
интерфейса на первом же WM_QUERYENDSESSION.

--
Regards, LVT.


Savek   (2008-10-31 15:36:00) [3]


> Ну ты попробовал без колбэков ?

Попробовал. На WM_QUERYENDSESSION реакция не изменилась (onclosequery  возникает onclose - нет, программа не завершает свою работу), а вот виндовс спокойно завершает работу программы!!! Попробовал колбэк в труе - такая же петрушка! Получается виндовс шлет программе другие сообщения? Интересно в какой момент решилась проблема, описанная в посте №1, а я об этом не знал, потому что проверял программу на воздействие WM_QUERYENDSESSION?
Всё-таки нужно сымитировать запрос виндовс на закрытие программы, а то слишком геморно перезагружать комп постоянно...

PS Сорри, сегодня больше не смогу появиться на форуме...


Rouse_   (2008-10-30 14:49:00) [4]

Вообще однажды я воспроизводил такую ситуацию и проявлялся такой эффект в случае невызова DefWindowProc в каком-то второстепенном невидимом окошке...


Сергей М.   (2008-10-30 12:36:00) [5]

Ну ты попробовал без колбэков ?


Savek   (2008-10-30 12:21:00) [6]


> Ты случаем (ну совершенно случайно) компоненты от печальноизвестных
> FastNet не используешь? Ну наподобие там NMUDP и т.п.?

нет


Rouse_   (2008-10-30 11:00:00) [7]

Ты случаем (ну совершенно случайно) компоненты от печальноизвестных FastNet не используешь? Ну наподобие там NMUDP и т.п.?


Savek   (2008-10-30 10:20:00) [8]

сделал

procedure TBaseForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=true;
  cnnSvrNakl.Close;
  comNakl:=nil;
end;
прога по - прежнему не закрывается на сообщение $0011
> Ты реально используешь колбэки или от балды True поставил
> ?

Раньше использовал, но из-за сложности не смог внедрить этот механизм в проект должным образом и отказался от него. Сейчас поставлю в false.


Сергей М.   (2008-10-30 10:05:00) [9]


> true


А собссно зачем ?
Ты реально используешь колбэки или от балды True поставил ?


Сергей М.   (2008-10-30 10:03:00) [10]


> я незнаю как это правильно сделать


Прямо в обработчике OnCloseQuery

comNakl := nil

интерфейсный объект будет уничтожен при условии, что интерфейсная ссылка более нигде кроме как в переменной comNakl у тебя не фигурирует.


> Соединение закрывается в OnClose


Перенеси закрытие прямо в OnCloseQuery

Пробуй ..


Savek   (2008-10-30 09:58:00) [11]


> А где и при каких условиях у тебя освобождается полученный
> интерфейсный объект

никак и нигде. по той причине, что я незнаю как это правильно сделать.
Соединение закрывается в OnClose  и освобождается в OnDestroy

> И, кстати, чему у тебя равно SupportCallbacks

true


Savek   (2008-10-30 09:54:00) [12]


> А где и при каких условиях у тебя освобождается полученный
> интерфейсный объект

никак и нигде. по той причине, что я незнаю как это правильно сделать.
Соединение закрывается в OnClose  и освобождается в OnDestroy


Сергей М.   (2008-10-30 09:35:00) [13]

И, кстати, чему у тебя равно SupportCallbacks ?


Сергей М.   (2008-10-30 09:18:00) [14]


> событие OnCloseQuery наступает, в нём ..CanClose:=true


Чудесно.

А где и при каких условиях у тебя освобождается полученный интерфейсный объект и закрывается сокетное соединение ?


Savek   (2008-10-30 09:05:00) [15]


> Дополнительный (уточняющий) вопрос. Сидит ли иконка приложения,
>  которое не дает выключить компьютер, в трее (вопрос не
> праздный)?

Раньше сидела, сейчас убрал все излишества.
> Попробуй начать отсюда:

спасибо, сейчас посмотрю
> Вот и начни с ЭТОГО.Как просветлишься по этому поводу -
> так сразу и милости просим

событие OnCloseQuery наступает, в нём по совету SmileCanClose:=true, событие OnClose не наступает.


Сергей М.   (2008-10-29 19:59:00) [16]


> Savek   (29.10.08 17:06) [5]
> не реагирует (по крайней мере нет видимой реакции)


Вот и начни с ЭТОГО.
Как просветлишься по этому поводу - так сразу и милости просим


Smile   (2008-10-29 18:36:00) [17]

Попробуй начать отсюда:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=57161
мне помогло:)
Ну, и рядом есть другие рекомендации по этому вопросу


Smile   (2008-10-29 17:59:00) [18]

Дополнительный (уточняющий) вопрос. Сидит ли иконка приложения, которое не дает выключить компьютер, в трее (вопрос не праздный)?


Savek   (2008-10-29 17:32:00) [19]


> С полгода назад столкнулся с похожей проблемой. Решение
> нашел на Королевстве. Деталей сейчас уже, к сожалению, не
> помню.Для начала попробуй в FormCloseQuery добавитьCanClose:
> =True;

не помогло (

> не реагирует (по крайней мере нет видимой реакции)

точнее реакция есть: если посмотреть лог Application.OnMessage сообщение приходит ($0011), но видимо не обрабатывается


Smile   (2008-10-29 17:25:00) [20]

С полгода назад столкнулся с похожей проблемой. Решение нашел на Королевстве. Деталей сейчас уже, к сожалению, не помню.
Для начала попробуй в FormCloseQueryдобавить
CanClose:=True;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо