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

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

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


laao ©   (2008-07-04 11:26:00) 

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

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

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


laao   (2008-07-07 09:13:00) [1]

> GrayFace

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


GrayFace   (2008-07-05 02:10:00) [2]

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


brother   (2008-07-04 12:29:00) [3]

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

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


Anatoly Podgoretsky   (2008-07-04 12:20:00) [4]

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


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


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

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


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

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

> Anatoly Podgoretsky

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


Anatoly Podgoretsky   (2008-07-04 11:40:00) [7]

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

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


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


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


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


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


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

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


Наверх

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