![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
объясните поведение 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]
> почему во-первых, окно таки выводится
потому как ты сказал ему вывестись, а к тому моменту приложение могло еще недоразрушиться