Главная страница
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.035 c
14-1132262245
Kerk
2005-11-18 00:17
2005.12.18
kladovka + delphibase


14-1132272722
Kerk
2005-11-18 03:12
2005.12.18
Никогда не используйте сторонние компоненты...


14-1133255967
тамара
2005-11-29 12:19
2005.12.18
Сеть


6-1125801373
KLAUS
2005-09-04 06:36
2005.12.18
Proxy


2-1132482425
Officeman
2005-11-20 13:27
2005.12.18
listview.Items.Item[t].Selected:=true; как scrollbar подвинуть ?