Главная страница
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.016 c
2-1215575714
Muh
2008-07-09 07:55
2008.08.10
Как в цикле перебрать допустим combobox1, combobox2


1-1196348183
Black Krok
2007-11-29 17:56
2008.08.10
Когда система "пукает"?


15-1214065908
TMichael
2008-06-21 20:31
2008.08.10
Linux c++


15-1214516044
homm
2008-06-27 01:34
2008.08.10
Поздравляю всех с победой


2-1215697755
Zhentos
2008-07-10 17:49
2008.08.10
Что-то не могу найти ф-цию сравнения чисел по модулю