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

Вниз

объясните поведение Delphi при выполнении следующего кода   Найти похожие ветки 

 
laao   (2008-07-04 11:26) [0]

объясните поведение Delphi при выполнении следующего кода :

try
 application.terminate;
finally
 showmessage("hello");
 sleep(5000);
end;

выполнив, можно в течении 5 секунд любоваться пустым окном без тайтла и текста сообщения. ну, допустим, заголовка нет, так как showmessage использует параметры приложения (вероятно, его хэндл перестает быть доступен после terminate ?), но почему во-первых, окно таки выводится, а во-вторых, hello пропадает ?


 
Правильный-Вася   (2008-07-04 11:29) [1]


> почему во-первых, окно таки выводится

потому как ты сказал ему вывестись, а к тому моменту приложение могло еще недоразрушиться


 
Сергей М. ©   (2008-07-04 11:38) [2]


> почему ..окно .. выводится


Потому что ты сам так пожелал.


 
Anatoly Podgoretsky ©   (2008-07-04 11:40) [3]

> laao  (04.07.2008 11:26:00)  [0]

Зачем ты такое делаешь, кульхацкер?


 
laao   (2008-07-04 12:17) [4]

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

> Anatoly Podgoretsky

спрашиваю, чтобы понять последовательность телодвижений приложения при его завершении


 
Плохиш ©   (2008-07-04 12:19) [5]


> laao   (04.07.08 12:17) [4]
> пример, кстати, не совсем надуманный и родился из просмотра
> чужого когда. только там между трай и файнали кода поболее
> и вместо showmessage чистка мусора за собой

Т.е. пример, как всегда, в виде вырезания гландов через задний проход...


 
Anatoly Podgoretsky ©   (2008-07-04 12:20) [6]

Если автора поймаешь то не трогай, оставь его мне.
(с) Белое солнце


 
brother ©   (2008-07-04 12:29) [7]

> Если автора поймаешь то не трогай, оставь его мне.
> (с) Белое солнце

Если встретишь его, не торгай, он мой (с) Белое солнце
;)


 
GrayFace ©   (2008-07-05 02:10) [8]

laao, у меня появляется и тут же исчезает.
Application.Terminate просто ставит флаг Terminated, говорящий, что цикл выборки сообщений нужно прекратить. В случае с чисткой мусора она будет происходить. Здесь смотри ShowMessage (Ctrl+клик) - он создает форму, настраивает на ней контролы и вызывает ShowModal - смотри его код - увидишь, в частности, цикл выборки сообщений с проверкой Terminated. При этом все сообщения, посылаемые через SendMessage внутри потока просто вызывает оконную процедуру, минуя очередь сообщений, соответственно, они обрабатываются. Окно пустое, т.к. оно не отрисовывается - WM_PAINT кладется в очередь сообщений и остается необработанным из-за Application.Terminated.
Твой код можно написать так:
application.terminate;
showmessage("hello");
sleep(5000);


 
laao   (2008-07-07 09:13) [9]

> GrayFace

спасибо за детальное разъяснение :)



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
2-1215492775
uno-84
2008-07-08 08:52
2008.08.10
Оповещение в нижнем правом углу экрана


4-1192602325
_Guest_
2007-10-17 10:25
2008.08.10
Распознать подключение / отключение флешки


2-1215536561
maxmic
2008-07-08 21:02
2008.08.10
clipbrd и бинарные данные


3-1204041756
Reindeer Moss Eater
2008-02-26 19:02
2008.08.10
MSSQL 2005 и политика паролей домена


15-1214233218
AEN
2008-06-23 19:00
2008.08.10
Если бесплатный хостинг