Текущий архив: 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.48 MB
Время: 0.012 c