![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
таймер
Алексей11 © (2007-12-05 14:37:00)Привет
Подскажите как сделать чтобы программа ничего не делала n секунд.
Timer1.Enable:=true;
Timer1.Interval:=1000;
while Timer1.Enable=true do..
Почему сваливается б бесконечный цикл(из цикал не вызывает событие ontimer)?
Как сделать правильно?
Второй вопрос, то же самое только время 'спячки' должно случайно выбираться в диапазоне от 10 до 60 секнуд?
Спасибо!
Denis__ (2007-12-05 16:24:00) [21]
>
> Какие потоки, помилуйте. Тут бы с букварем разобраться.
так ведь Алексей 11:))
Юрий Зотов (2007-12-05 16:23:00) [22]> @!!ex © (05.12.07 16:06) [18]
Есть такой способ, но тогда уж лучше MsgWaiForMultipleObjects.
Dennis I. Komarov (2007-12-05 16:10:00) [23]> [17] Юрий Зотов © (05.12.07 16:01)
Какие потоки, помилуйте. Тут бы с букварем разобраться.
@!!ex (2007-12-05 16:06:00) [24]> [12] Юрий Зотов © (05.12.07 15:51)
> > @!!ex © (05.12.07 15:17) [10]
>
> Дык... а что тут рассказывать? Sleep усыпляет текущий поток.
> Если в этом же потоке идет обработка сообщений визуального
> интерфейса, то на время спячки сообщения, естественно, перестают
> обрабатываться и создается ощущение, что программа "подвисла".
>
> Теперь вызываем Sleep в цикле, как Вы советуете для того,
> чтобы "приложение не висело". А что изменилось? Ничего,
> кроме того, что теперь программа будет "подвисать" на каждом
> витке цикла. То есть, стало еще хуже.
Ставим Sleep(10) и пользователь не замечает, что приложение подвисает, однако при этом оно реально висит в цикле.
ПРавда зчем это делать - ума не приложу.
Юрий Зотов (2007-12-05 16:01:00) [25]> Алексей11 (05.12.07 15:51) [13]
> Почему окно появляется не сразу а после того как программа отработает
> то есть через 5 сек?
Потому что Вы сами ей это приказали.
> Ну как бы обьяснить, нужно чтоб седала что то, подождала 15 сек,
> сделала опять и тд.
Зависит от задачи. Можно вставить в этот цикл Sleep, но тогда крутить его надо в дополнительном потоке. Можно крутить этот цикл и в основном потоке, но тогда вместо Sleep надо использовать MsgWaitForMultipleObjects. Можно использовать таймер, который при тике взводит логический флажок (и если флажок не взведен, то цикл крутится вхолостую, только вызывая Application.ProcessMessages, а если взведен, то останавливается таймер сбрасывается флажок, выполняется нужная работа и снова запускается таймер). И т.д.
Dennis I. Komarov (2007-12-05 15:57:00) [26]> [15] Dennis I. Komarov © (05.12.07 15:55)
+ при этом хоть Sleep, хоть не Sleep все одно будет :)
Вопрос: а на какого его отображать, а потом в мемо добавлять?
Dennis I. Komarov (2007-12-05 15:55:00) [27]> [13] Алексей11 (05.12.07 15:51)
Create он до Show делается :)
Palladin (2007-12-05 15:54:00) [28]
> Алексей11 (05.12.07 15:51) [13]
потому что ты сам запретил программе работать, а отображение окна - это тоже работа программы
Алексей11 (2007-12-05 15:51:00) [29]Почему с использованием такой конструкции окно появляется не сразу а после того как программа отработает то есть через 5 сек?
procedure TForm2.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('1');
sleep(5000);
Memo1.Lines.Add('2');
end;
Ну как бы обьяснить, нужно чтоб седала что то, подождала 15 сек, сделала опять и тд.
Юрий Зотов (2007-12-05 15:51:00) [30]> @!!ex © (05.12.07 15:17) [10]
Дык... а что тут рассказывать? Sleep усыпляет текущий поток. Если в этом же потоке идет обработка сообщений визуального интерфейса, то на время спячки сообщения, естественно, перестают обрабатываться и создается ощущение, что программа "подвисла".
Теперь вызываем Sleep в цикле, как Вы советуете для того, чтобы "приложение не висело". А что изменилось? Ничего, кроме того, что теперь программа будет "подвисать" на каждом витке цикла. То есть, стало еще хуже.
Palladin (2007-12-05 15:22:00) [31]
> чтобы программа ничего не делала
а что она должна делать? если вообще ничего то sleep конечно... а если под "делала" подразумевается определенная задача, то лучше воспользоваться тем же sleep но уже в огранизованном под это "делала" потоком (Thread)
@!!ex (2007-12-05 15:17:00) [32]> [5] Юрий Зотов © (05.12.07 14:49)
Не знаю...
Расскажите?
Dennis I. Komarov (2007-12-05 15:00:00) [33]> [6] Denis__ © (05.12.07 14:52)
Нафиг цикл, если есть Sleep?
{RASkov} (2007-12-05 14:55:00) [34]> [4] Сергей М. © (05.12.07 14:45)
> Ну и нафих нужна такая программа ?)
Дык она отдохнет n секунд, а потом опять пашет....пашет)
Правильный_Вася (2007-12-05 14:53:00) [35]
> Ну и нафих нужна такая программа
будет изображать обои на рабочем столе
Denis__ (2007-12-05 14:52:00) [36]нафиг sleep, если цикл?
Юрий Зотов (2007-12-05 14:49:00) [37]> @!!ex © (05.12.07 14:44) [3]
> А если нужно чтобы приложение не висело - цикл.
> Sleep + ProcessMessages
А если подумать?
:о)
Сергей М. (2007-12-05 14:45:00) [38]
> как сделать чтобы программа ничего не делала
Ну и нафих нужна такая программа ?)
@!!ex (2007-12-05 14:44:00) [39]> [0] Алексей11 (05.12.07 14:37)
Правильно Sleep.
А если нужно чтобы приложение не висело - цикл. Sleep + ProcessMessages
Правильный_Вася (2007-12-05 14:42:00) [40]
> случайно выбираться
random