Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

таймер


Страницы:   1 2 3

Алексей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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо