![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как уничтожить класс, который ожидает реакцию пользователя? [D7]
BigProg © (2005-11-24 01:40:00)Ожидает вот так :
while Status <> sdaNone do Application.ProcessMessages;
Когда таймер выставит Status в sdaNone, то произойдёт выход из функции.
Вопрос, что делать, если пользователь в этот момент закрывает программу ?
У меня происходит вызов деструктора класса. Я из деструктора ставлю Status в sdaNone, делаю Application.ProcessMessages; в цикле, в ожидании, что функция завершиться, а она не завершается ...
Поэтому вопрос, как правильно в этой ситуации класс уничтожить?
evvcom (2005-11-24 14:38:00) [1]
> Расскажите про левые циклы авторам ShowMessage. То есть
> тормозам из Борланда.
Зря ты так. Ты когда-нибудь код от Борланда анализировал? Есть чему поучиться.
Во-первых, циклы не в ShowMessage, а в ShowModal.
Во-вторых, у них в цикле сидит не Application.ProcessMessages, а Application.ProcessMessage.
И в-третьих, кроме ProcessMessage в этом цикле еще сидит WaitMessage, вызов которой и разгружает процессор. А теперь посмотри на занятость своего процессора при работе твоего цикла. Ощущаешь разницу?
Ну и кто теперь тормоз? Борланд?
Digitman (2005-11-24 10:12:00) [2]
> что делать, если пользователь в этот момент закрывает программу
> ?
begin
...
while Условие and not Application.Terminated do
something;
if Application.Terminated then Exit;
..
end;
Leonid Troyanovsky (2005-11-24 09:23:00) [3]
> BigProg (24.11.05 07:16) [6]
> Когда пользователь на image кликнет, или определённое время
> само пройдёт.
Когда кликнет - OnClick : Application.MainForm.Close;
Когда пройдет - OnTimer: Application.MainForm.Close;
--
Regards, LVT.
Васяня (2005-11-24 08:56:00) [4]BigProg, ты за советом обратился или как? а чо тогда ерипенишся?
BigProg (2005-11-24 07:56:00) [5]
> ЮЮ © (24.11.05 07:43) [7]
>
> >Когда пользователь на image кликнет, или определённое время
> само пройдёт.
>
> >определённое время само пройдёт.
>
> Для этого и нужен таймер, у которого интервал установи в
> соответствии с тем временем, что отведено пользователю.
> Когда это время придет вызовется обработчик OnTimer
>
> Когда пользователь на image кликнет возникнет событие и
> вызовется обработчик OnClick, где следует остановить таймер.
>
>
> И не нужно никаких левых циклов, т.к. Application.Run и
> есть тот самый цикл, который обрабатывает все сообщения
>
Расскажите про левые циклы авторам ShowMessage. То есть тормозам из Борланда.
ЮЮ (2005-11-24 07:43:00) [6]>Когда пользователь на image кликнет, или определённое время само пройдёт.
>определённое время само пройдёт.
Для этого и нужен таймер, у которого интервал установи в соответствии с тем временем, что отведено пользователю. Когда это время придет вызовется обработчик OnTimer
Когда пользователь на image кликнет возникнет событие и вызовется обработчик OnClick, где следует остановить таймер.
И не нужно никаких левых циклов, т.к. Application.Run и есть тот самый цикл, который обрабатывает все сообщения
BigProg (2005-11-24 07:16:00) [7]
> Васяня (24.11.05 05:53) [5]
>
> В ONClose запихни Halt, не правильный подход (наверное),
> но должно помоЧЬ... А вообще если делать по нормальному
> надо было создать поток и в нем ждать. Хотя я понятия не
> имею чего ты имеено там ожитаешь, но эта конструкция доверия
> не внушает...
Когда пользователь на image кликнет, или определённое время само пройдёт.
Ну типа, на подобии ShowMessage. Там же тоже где-то внутри крутится в ожидании.
И работает то всё нормально. Только вот это грёбанное завершение достало.
Васяня (2005-11-24 05:53:00) [8]В ONClose запихни Halt, не правильный подход (наверное), но должно помоЧЬ... А вообще если делать по нормальному надо было создать поток и в нем ждать. Хотя я понятия не имею чего ты имеено там ожитаешь, но эта конструкция доверия не внушает...
BigProg (2005-11-24 05:16:00) [9]
> ЮЮ © (24.11.05 03:38) [2]
>
> И чего он "ожидает" в таком цикле?
Ожидает, когда метод завершится.
> Не проше просто выйти из этого метода
Так не выходится.
> и вызвать его в SetStatus, когда Status станет не sdaNone
Что такое SetStatus? Не понял.
Toxa_ua (2005-11-24 03:58:00) [10]почитай про метод Free
ЮЮ (2005-11-24 03:38:00) [11]И чего он "ожидает" в таком цикле? Не проше просто выйти из этого метода и вызвать его в SetStatus, когда Status станет не sdaNone
BigProg (2005-11-24 03:13:00) [12]Удалено модератором
Примечание: Создание пустых сообщений