Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
5-1117455686
Prohodil Mimo
2005-05-30 16:21
2005.12.18
отлов нажатия ТАБ - всё работает, но слышен beep.


14-1132951298
antonpv
2005-11-25 23:41
2005.12.18
Delphi 7 Service Pack1


14-1132753711
Карелин Артем
2005-11-23 16:48
2005.12.18
Подскажите софт для форматирования SQL-запросов.


2-1132786540
Дева
2005-11-24 01:55
2005.12.18
CommaText


8-1121170462
nstur
2005-07-12 16:14
2005.12.18
Выполнить Stretch jpg файла