Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Как уничтожить класс, который ожидает реакцию пользователя?   Найти похожие ветки 

 
BigProg   (2005-11-24 01:40) [0]

Ожидает вот так :
while Status <> sdaNone do Application.ProcessMessages;

Когда таймер выставит Status в sdaNone, то произойдёт выход из функции.

Вопрос, что делать, если пользователь в этот момент закрывает программу ?
У меня происходит вызов деструктора класса. Я из деструктора ставлю Status в sdaNone, делаю  Application.ProcessMessages; в цикле, в ожидании, что функция завершиться, а она не завершается ...

Поэтому вопрос, как правильно в этой ситуации класс уничтожить?


 
BigProg   (2005-11-24 03:13) [1]

Удалено модератором
Примечание: Создание пустых сообщений


 
ЮЮ ©   (2005-11-24 03:38) [2]

И чего он "ожидает" в таком цикле? Не проше просто выйти из этого метода и вызвать его в SetStatus, когда Status станет не sdaNone


 
Toxa_ua ©   (2005-11-24 03:58) [3]

почитай про метод Free


 
BigProg   (2005-11-24 05:16) [4]


> ЮЮ ©   (24.11.05 03:38) [2]
>
> И чего он "ожидает" в таком цикле?


Ожидает, когда метод завершится.


> Не проше просто выйти из этого метода


Так не выходится.


> и вызвать его в SetStatus, когда Status станет не sdaNone


Что такое SetStatus?  Не понял.


 
Васяня   (2005-11-24 05:53) [5]

В ONClose запихни Halt, не правильный подход (наверное), но должно помоЧЬ... А вообще если делать по нормальному надо было создать поток и в нем ждать. Хотя я понятия не имею чего ты имеено там ожитаешь, но эта конструкция доверия не внушает...


 
BigProg   (2005-11-24 07:16) [6]


> Васяня   (24.11.05 05:53) [5]
>
> В ONClose запихни Halt, не правильный подход (наверное),
>  но должно помоЧЬ... А вообще если делать по нормальному
> надо было создать поток и в нем ждать. Хотя я понятия не
> имею чего ты имеено там ожитаешь, но эта конструкция доверия
> не внушает...


Когда пользователь на image кликнет, или определённое время само пройдёт.
Ну типа, на подобии ShowMessage. Там же тоже где-то внутри крутится в ожидании.

И работает то всё нормально. Только вот это грёбанное завершение достало.


 
ЮЮ ©   (2005-11-24 07:43) [7]

>Когда пользователь на image кликнет, или определённое время само пройдёт.

>определённое время само пройдёт.

Для этого и нужен таймер, у которого интервал установи в соответствии с тем временем, что отведено пользователю. Когда это время придет вызовется обработчик OnTimer

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

И не нужно никаких левых циклов, т.к. Application.Run и есть тот самый цикл, который обрабатывает все сообщения


 
BigProg   (2005-11-24 07:56) [8]


> ЮЮ ©   (24.11.05 07:43) [7]
>
> >Когда пользователь на image кликнет, или определённое время
> само пройдёт.
>
> >определённое время само пройдёт.
>
> Для этого и нужен таймер, у которого интервал установи в
> соответствии с тем временем, что отведено пользователю.
> Когда это время придет вызовется обработчик OnTimer
>
> Когда пользователь на image кликнет возникнет событие и
> вызовется обработчик OnClick, где следует остановить таймер.
>
>
> И не нужно никаких левых циклов, т.к. Application.Run и
> есть тот самый цикл, который обрабатывает все сообщения
>


Расскажите про левые циклы авторам ShowMessage. То есть тормозам из Борланда.


 
Васяня   (2005-11-24 08:56) [9]

BigProg, ты за советом обратился или как? а чо тогда ерипенишся?


 
Leonid Troyanovsky ©   (2005-11-24 09:23) [10]


> BigProg   (24.11.05 07:16) [6]


> Когда пользователь на image кликнет, или определённое время
> само пройдёт.

Когда кликнет - OnClick : Application.MainForm.Close;
Когда пройдет - OnTimer: Application.MainForm.Close;

--
Regards, LVT.


 
Digitman ©   (2005-11-24 10:12) [11]


> что делать, если пользователь в этот момент закрывает программу
> ?


begin
...
while Условие and not Application.Terminated do
 something;
if Application.Terminated then Exit;

..

end;


 
evvcom ©   (2005-11-24 14:38) [12]


> Расскажите про левые циклы авторам ShowMessage. То есть
> тормозам из Борланда.

Зря ты так. Ты когда-нибудь код от Борланда анализировал? Есть чему поучиться.
Во-первых, циклы не в ShowMessage, а в ShowModal.
Во-вторых, у них в цикле сидит не Application.ProcessMessages, а Application.ProcessMessage.
И в-третьих, кроме ProcessMessage в этом цикле еще сидит WaitMessage, вызов которой и разгружает процессор. А теперь посмотри на занятость своего процессора при работе твоего цикла. Ощущаешь разницу?
Ну и кто теперь тормоз? Борланд?



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

Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.015 c
1-1132585085
Officeman
2005-11-21 17:58
2005.12.18
ГЛЮКИ


8-1121182959
fess
2005-07-12 19:42
2005.12.18
Использование серии Shape в Charte


9-1122351167
WondeRu
2005-07-26 08:12
2005.12.18
DirectDraw. Вывод DIB-битмапа. Как?


2-1133454377
stef
2005-12-01 19:26
2005.12.18
Вопрос по image


1-1132769272
Silica
2005-11-23 21:07
2005.12.18
Линейная интерполяция





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский