Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];
ВнизПрограмма не завершается Найти похожие ветки
← →
Savek (2008-10-29 16:28) [0]Программа клиент, которая подключается к серверу приложений (сокеты) не дает перезагрузить или выключить компьютер. Т.е. виндоус не может завершить её работу, хотя при нажатии на красн. крестик программа корректно завершает свою работу. Также программа завершает работу если послать ей сообщение
PostMessage(FindWindow(nil, "BaseForm"), WM_Close, 0, 0);
из др. программы. Опытным путём установлено, что казус проявляются после того как импортируется интерфейс сервера
comNakl:=INumber3Disp(cnnSvrNakl.GetServer);
здесь INumber3Disp - interface(IDispatch) сервера
cnnSvrNakl - TSocketConnection
Ситуация непонятная. Помоготе прояснить
← →
Сергей М. © (2008-10-29 16:37) [1]
> Savek (29.10.08 16:28)
На WM_QUERYENDSESSION твое приложение реагирует хоть каким-то образом ?
← →
Сергей М. © (2008-10-29 16:47) [2]
> красн. крестик
Это где такая "скорая помощь" живет ?
У меня нет такого ..
← →
Ega23 © (2008-10-29 16:54) [3]
> Это где такая "скорая помощь" живет ?
> У меня нет такого ..
У меня тоже нет, но сильно подозреваю, что это тема XP.
Лично я её терпеть не могу, исключительно классическую использую.
← →
Сергей М. © (2008-10-29 17:03) [4]
> Ega23 © (29.10.08 16:54) [3]
А вот автор свято верит в то что красный крестик знаком любому)
← →
Savek (2008-10-29 17:06) [5]
> На WM_QUERYENDSESSION твое приложение реагирует хоть каким-
> то образом ?
не реагирует (по крайней мере нет видимой реакции)
← →
Smile (2008-10-29 17:25) [6]С полгода назад столкнулся с похожей проблемой. Решение нашел на Королевстве. Деталей сейчас уже, к сожалению, не помню.
Для начала попробуй вFormCloseQuery
добавитьCanClose:=True;
← →
Savek (2008-10-29 17:32) [7]
> С полгода назад столкнулся с похожей проблемой. Решение
> нашел на Королевстве. Деталей сейчас уже, к сожалению, не
> помню.Для начала попробуй в FormCloseQuery добавитьCanClose:
> =True;
не помогло (
> не реагирует (по крайней мере нет видимой реакции)
точнее реакция есть: если посмотреть лог Application.OnMessage сообщение приходит ($0011), но видимо не обрабатывается
← →
Smile (2008-10-29 17:59) [8]Дополнительный (уточняющий) вопрос. Сидит ли иконка приложения, которое не дает выключить компьютер, в трее (вопрос не праздный)?
← →
Smile (2008-10-29 18:36) [9]Попробуй начать отсюда:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=57161
мне помогло:)
Ну, и рядом есть другие рекомендации по этому вопросу
← →
Сергей М. © (2008-10-29 19:59) [10]
> Savek (29.10.08 17:06) [5]
> не реагирует (по крайней мере нет видимой реакции)
Вот и начни с ЭТОГО.
Как просветлишься по этому поводу - так сразу и милости просим
← →
Savek (2008-10-30 09:05) [11]
> Дополнительный (уточняющий) вопрос. Сидит ли иконка приложения,
> которое не дает выключить компьютер, в трее (вопрос не
> праздный)?
Раньше сидела, сейчас убрал все излишества.
> Попробуй начать отсюда:
спасибо, сейчас посмотрю
> Вот и начни с ЭТОГО.Как просветлишься по этому поводу -
> так сразу и милости просим
событие OnCloseQuery наступает, в нём по советуSmile CanClose:=true, событие OnClose не наступает.
← →
Сергей М. © (2008-10-30 09:18) [12]
> событие OnCloseQuery наступает, в нём ..CanClose:=true
Чудесно.
А где и при каких условиях у тебя освобождается полученный интерфейсный объект и закрывается сокетное соединение ?
← →
Сергей М. © (2008-10-30 09:35) [13]И, кстати, чему у тебя равно SupportCallbacks ?
← →
Savek (2008-10-30 09:54) [14]
> А где и при каких условиях у тебя освобождается полученный
> интерфейсный объект
никак и нигде. по той причине, что я незнаю как это правильно сделать.
Соединение закрывается в OnClose и освобождается в OnDestroy
← →
Savek (2008-10-30 09:58) [15]
> А где и при каких условиях у тебя освобождается полученный
> интерфейсный объект
никак и нигде. по той причине, что я незнаю как это правильно сделать.
Соединение закрывается в OnClose и освобождается в OnDestroy
> И, кстати, чему у тебя равно SupportCallbacks
true
← →
Сергей М. © (2008-10-30 10:03) [16]
> я незнаю как это правильно сделать
Прямо в обработчике OnCloseQuery
comNakl := nil
интерфейсный объект будет уничтожен при условии, что интерфейсная ссылка более нигде кроме как в переменной comNakl у тебя не фигурирует.
> Соединение закрывается в OnClose
Перенеси закрытие прямо в OnCloseQuery
Пробуй ..
← →
Сергей М. © (2008-10-30 10:05) [17]
> true
А собссно зачем ?
Ты реально используешь колбэки или от балды True поставил ?
← →
Savek (2008-10-30 10:20) [18]сделал
procedure TBaseForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=true;
cnnSvrNakl.Close;
comNakl:=nil;
end;
прога по - прежнему не закрывается на сообщение $0011
> Ты реально используешь колбэки или от балды True поставил
> ?
Раньше использовал, но из-за сложности не смог внедрить этот механизм в проект должным образом и отказался от него. Сейчас поставлю в false.
← →
Rouse_ © (2008-10-30 11:00) [19]Ты случаем (ну совершенно случайно) компоненты от печальноизвестных FastNet не используешь? Ну наподобие там NMUDP и т.п.?
← →
Savek (2008-10-30 12:21) [20]
> Ты случаем (ну совершенно случайно) компоненты от печальноизвестных
> FastNet не используешь? Ну наподобие там NMUDP и т.п.?
нет
← →
Сергей М. © (2008-10-30 12:36) [21]Ну ты попробовал без колбэков ?
← →
Rouse_ © (2008-10-30 14:49) [22]Вообще однажды я воспроизводил такую ситуацию и проявлялся такой эффект в случае невызова DefWindowProc в каком-то второстепенном невидимом окошке...
← →
Savek (2008-10-31 15:36) [23]
> Ну ты попробовал без колбэков ?
Попробовал. На WM_QUERYENDSESSION реакция не изменилась (onclosequery возникает onclose - нет, программа не завершает свою работу), а вот виндовс спокойно завершает работу программы!!! Попробовал колбэк в труе - такая же петрушка! Получается виндовс шлет программе другие сообщения? Интересно в какой момент решилась проблема, описанная в посте №1, а я об этом не знал, потому что проверял программу на воздействие WM_QUERYENDSESSION?
Всё-таки нужно сымитировать запрос виндовс на закрытие программы, а то слишком геморно перезагружать комп постоянно...
PS Сорри, сегодня больше не смогу появиться на форуме...
← →
Leonid Troyanovsky © (2008-10-31 16:35) [24]
> Savek (29.10.08 16:28)
> после того как импортируется интерфейс сервера
Посмотри winsight32 or spy+ какие окна появляются после импорта.
Если, например, это (невидимое) окно верхнего уровня, то оно может
возвращать 0 на WM_QUERYENDSESSION.
Лечить можно установкой хука WH_CALLWNDPROC и закрытием
интерфейса на первом же WM_QUERYENDSESSION.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-10-31 16:40) [25]
> Savek (31.10.08 15:36) [23]
> Всё-таки нужно сымитировать запрос виндовс на закрытие программы,
> а то слишком геморно перезагружать комп постоянно...
Логоф спасет ОРД.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c