Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
Внизобъясните поведение 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c