Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1202120742
igor666
2008-02-04 13:25
2008.12.14
USB-порты


1-1204138664
POP
2008-02-27 21:57
2008.12.14
SHA-1


2-1225912955
juri79
2008-11-05 22:22
2008.12.14
Вылетает с ошибкой


3-1210699405
zerohold
2008-05-13 21:23
2008.12.14
Временные файлы при выполнении SQL запроса


2-1226049431
Denis__
2008-11-07 12:17
2008.12.14
GetTickCount в Turbo Pascal 7.0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский