Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

таймер   Найти похожие ветки 

 
Алексей11   (2007-12-05 14:37) [0]

Привет
Подскажите как сделать чтобы программа ничего не делала n секунд.
Timer1.Enable:=true;
Timer1.Interval:=1000;
while Timer1.Enable=true do..
Почему сваливается б бесконечный цикл(из цикал не вызывает событие ontimer)?
Как сделать правильно?

Второй вопрос, то же самое только время "спячки" должно случайно выбираться в диапазоне от 10 до 60 секнуд?
Спасибо!


 
Dennis I. Komarov ©   (2007-12-05 14:39) [1]

Sleep(...


 
Правильный_Вася   (2007-12-05 14:42) [2]


>  случайно выбираться

random


 
@!!ex ©   (2007-12-05 14:44) [3]

> [0] Алексей11   (05.12.07 14:37)

Правильно Sleep.

А если нужно чтобы приложение не висело - цикл. Sleep + ProcessMessages


 
Сергей М. ©   (2007-12-05 14:45) [4]


> как сделать чтобы программа ничего не делала


Ну и нафих нужна такая программа ?)


 
Юрий Зотов ©   (2007-12-05 14:49) [5]

> @!!ex ©   (05.12.07 14:44) [3]

> А если нужно чтобы приложение не висело - цикл.
> Sleep + ProcessMessages

А если подумать?
:о)


 
Denis__ ©   (2007-12-05 14:52) [6]

нафиг sleep, если цикл?


 
Правильный_Вася   (2007-12-05 14:53) [7]


> Ну и нафих нужна такая программа

будет изображать обои на рабочем столе


 
{RASkov} ©   (2007-12-05 14:55) [8]

> [4] Сергей М. ©   (05.12.07 14:45)
> Ну и нафих нужна такая программа ?)

Дык она отдохнет n секунд, а потом опять пашет....пашет)


 
Dennis I. Komarov ©   (2007-12-05 15:00) [9]

> [6] Denis__ ©   (05.12.07 14:52)

Нафиг цикл, если есть Sleep?


 
@!!ex ©   (2007-12-05 15:17) [10]

> [5] Юрий Зотов ©   (05.12.07 14:49)

Не знаю...
Расскажите?


 
Palladin ©   (2007-12-05 15:22) [11]


> чтобы программа ничего не делала

а что она должна делать? если вообще ничего то sleep конечно... а если под "делала" подразумевается определенная задача, то лучше воспользоваться тем же sleep но уже в огранизованном под это "делала" потоком (Thread)


 
Юрий Зотов ©   (2007-12-05 15:51) [12]

> @!!ex ©   (05.12.07 15:17) [10]

Дык... а что тут рассказывать? Sleep усыпляет текущий поток. Если в этом же потоке идет обработка сообщений визуального интерфейса, то на время спячки сообщения, естественно, перестают обрабатываться и создается ощущение, что программа "подвисла".

Теперь вызываем Sleep в цикле, как Вы советуете для того, чтобы "приложение не висело". А что изменилось? Ничего, кроме того, что теперь программа будет "подвисать" на каждом витке цикла. То есть, стало еще хуже.


 
Алексей11   (2007-12-05 15:51) [13]

Почему с использованием такой конструкции окно появляется не сразу а после того как программа отработает то есть через 5 сек?

procedure TForm2.FormCreate(Sender: TObject);
begin
 Memo1.Lines.Clear;
 Memo1.Lines.Add("1");
 sleep(5000);
 Memo1.Lines.Add("2");
end;

Ну как бы обьяснить, нужно чтоб седала что то, подождала 15 сек, сделала опять и тд.


 
Palladin ©   (2007-12-05 15:54) [14]


> Алексей11   (05.12.07 15:51) [13]

потому что ты сам запретил программе работать, а отображение окна - это тоже работа программы


 
Dennis I. Komarov ©   (2007-12-05 15:55) [15]

> [13] Алексей11   (05.12.07 15:51)

Create он до Show делается :)


 
Dennis I. Komarov ©   (2007-12-05 15:57) [16]

> [15] Dennis I. Komarov ©   (05.12.07 15:55)

+ при этом хоть Sleep, хоть не Sleep все одно будет :)

Вопрос: а на какого его отображать, а потом в мемо добавлять?


 
Юрий Зотов ©   (2007-12-05 16:01) [17]

> Алексей11   (05.12.07 15:51) [13]

> Почему окно появляется не сразу а после того как программа отработает
> то есть через 5 сек?

Потому что Вы сами ей это приказали.

> Ну как бы обьяснить, нужно чтоб седала что то, подождала 15 сек,
> сделала опять и тд.

Зависит от задачи. Можно вставить в этот цикл Sleep, но тогда крутить его надо в дополнительном потоке. Можно крутить этот цикл и в основном потоке, но тогда вместо Sleep надо использовать MsgWaitForMultipleObjects. Можно использовать таймер, который при тике взводит логический флажок (и если флажок не взведен, то цикл крутится вхолостую, только вызывая Application.ProcessMessages, а если взведен, то  останавливается таймер сбрасывается флажок, выполняется нужная работа и снова запускается таймер). И т.д.


 
@!!ex ©   (2007-12-05 16:06) [18]

> [12] Юрий Зотов ©   (05.12.07 15:51)
> > @!!ex ©   (05.12.07 15:17) [10]
>
> Дык... а что тут рассказывать? Sleep усыпляет текущий поток.
> Если в этом же потоке идет обработка сообщений визуального
> интерфейса, то на время спячки сообщения, естественно, перестают
> обрабатываться и создается ощущение, что программа "подвисла".
>
> Теперь вызываем Sleep в цикле, как Вы советуете для того,
> чтобы "приложение не висело". А что изменилось? Ничего,
> кроме того, что теперь программа будет "подвисать" на каждом
> витке цикла. То есть, стало еще хуже.

Ставим Sleep(10) и пользователь не замечает, что приложение подвисает, однако при этом оно реально висит в цикле.
ПРавда зчем это делать - ума не приложу.


 
Dennis I. Komarov ©   (2007-12-05 16:10) [19]

> [17] Юрий Зотов ©   (05.12.07 16:01)

Какие потоки, помилуйте. Тут бы с букварем разобраться.


 
Юрий Зотов ©   (2007-12-05 16:23) [20]

> @!!ex ©   (05.12.07 16:06) [18]

Есть такой способ, но тогда уж лучше MsgWaiForMultipleObjects.


 
Denis__ ©   (2007-12-05 16:24) [21]


>
> Какие потоки, помилуйте. Тут бы с букварем разобраться.

так ведь Алексей11 :))


 
Denis__ ©   (2007-12-05 16:26) [22]


>
> Нафиг цикл, если есть Sleep?

Вы тоже правы:), но Юрий Зотов ©   (05.12.07 15:51) [12]


 
Dennis I. Komarov ©   (2007-12-05 16:32) [23]

> [22] Denis__ ©   (05.12.07 16:26)
>
> >
> > Нафиг цикл, если есть Sleep?
>
> Вы тоже правы:), но Юрий Зотов ©   (05.12.07 15:51) [12]

И что?
> [0] Алексей11   (05.12.07 14:37)
> Подскажите как сделать чтобы программа ничего не делала
> n секунд.


 
Denis__ ©   (2007-12-05 16:36) [24]

и вообще... Стреляли! если выполняется цикл, то что, значит программа ничего не делает? :) Это ведь очень интересный вопрос! А что делает программа, когда стоит sleep() ?


 
Алексей11   (2007-12-05 16:36) [25]

Это раздел форума для новичков.
Если вы считаете себя очень опытным то что вы тут делаете, советуете мне разобраться с букварем? Во первых это нарушает правила, во вторых просто не красиво. Откуда вам знать что я умею и чем я знаимаюсь? Неприятно.


 
Dennis I. Komarov ©   (2007-12-05 16:37) [26]

> А что делает программа, когда стоит sleep() ?

см. [12] :)


 
homm ©   (2007-12-05 16:39) [27]

> [22] Denis__ ©   (05.12.07 16:26)
> Вы тоже правы:), но

Что но?

procedure SleepExEx(MSec: DWORD);
var T: DWORD;
begin
 T := GetTickCount;
 while GetTickCount - T < MSec do begin
   sleep(10);
   Application.ProcessMessages;
 end;
end;


И программа в ожидании, и пользователь работает, и загрузка процессора нулевая. Всем кайф.


 
homm ©   (2007-12-05 16:40) [28]

> [24] Denis__ ©   (05.12.07 16:36)
> А что делает программа, когда стоит sleep()

Ничего не делает.


 
Dennis I. Komarov ©   (2007-12-05 16:40) [29]

> Во первых это нарушает правила,

???
> во вторых просто не красиво

Еще один :)
> Откуда вам знать что я умею и чем я знаимаюсь?

см. [0]


 
homm ©   (2007-12-05 16:41) [30]

> [25] Алексей11   (05.12.07 16:36)
> Если вы считаете себя очень опытным то что вы тут делаете,
> советуете мне разобраться с букварем?

Какие мы нежные. Про букварь вообще не тебе сказано было (но в твой адресс, естественно).


 
Сергей М. ©   (2007-12-05 16:42) [31]


> Алексей11   (05.12.07 16:36) [25]


Новичку следует, прежде всего, усвоить, что в мультизадачной системе приложение "ничего не делает" только тогда, когда "спят" все существующие кодовые потоки процесса этого приложения.


 
Gydvin ©   (2007-12-05 16:52) [32]


> ПРавда зчем это делать - ума не приложу.

Ну например, при циклическом вызове определенной функции возвращающей результат в зависимости от внешних факторов (при условии, что она когданить вернет нужный тебе результат). И чтоб не кушать процессорное время ставят туда sleep и  ProcessMessages. Этакий ожидающий цикл.


 
Gydvin ©   (2007-12-05 16:54) [33]


> homm ©   (05.12.07 16:39) [27]

Пока писал... )


 
Denis__ ©   (2007-12-05 17:00) [34]


> procedure SleepExEx(MSec: DWORD);
> var T: DWORD;
> begin
>  T := GetTickCount;
>  while GetTickCount - T < MSec do begin
>    sleep(10);
>    Application.ProcessMessages;
>  end;
> end;


Программа ничего не делает? А выполнение цикла?


> Если вы считаете себя очень опытным то что вы тут делаете,
>  советуете мне разобраться с букварем?


Советовал не я, но разобраться не мешает, тут тёзка прав :)

> Dennis I. Komarov ©   (05.12.07 16:37) [26]
> > А что делает программа, когда стоит sleep() ?
>
> см. [12] :)

Меня больше интересует, как реализована задержка.


 
homm ©   (2007-12-05 17:01) [35]

> [34] Denis__ ©   (05.12.07 17:00)
> Меня больше интересует, как реализована задержка.

Реализована где? В функции Sleep()? Все просто, диспетчер процессов не дает квант времени процессу, пока не истечет таймаут.


 
homm ©   (2007-12-05 17:02) [36]

> [34] Denis__ ©   (05.12.07 17:00)
> Программа ничего не делает?

Делает. Ожидает. А я как написал?


 
Игорь Шевченко ©   (2007-12-05 17:23) [37]

Некрасиво такие вопросы задавать


 
Алексей11   (2007-12-05 23:17) [38]

homm тогда сорри!

ну млин написали сколько вроде вот в консоли на серваке на пхп просто
делаем гет запрос
парсим куку из ответа
ждем 15 сек через слип
делаем второй запрос с нашей кукой

а на винде без поллитра не разберешься, буду читать что вы тут понаписали, спасибо)


 
Юрий Зотов ©   (2007-12-05 23:24) [39]

> Алексей11   (05.12.07 23:17) [38]

В консоли и на винде то же самое. А вот если не в консоли, а в окне - так ведь ему же, этому окну, перерисовываться иногда нужно (например, когда по нему другое окно таскают). А если окно в этот момент в слипе висит, то как оно перерисуется? Никак. Пока слип не кончится.

Поэтому все и сложнее.


 
homm ©   (2007-12-05 23:28) [40]

> [38] Алексей11   (05.12.07 23:17)
> ну млин написали сколько вроде вот в консоли на серваке
> на пхп просто


писали русском языке бы лучше да не ага поллитры в саду он причем сорок два



Страницы: 1 2 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.016 c
2-1196795078
olegusis
2007-12-04 22:04
2007.12.30
функция Random


2-1196692668
WFS
2007-12-03 17:37
2007.12.30
Несколько вопросов про картинки


2-1196846087
slavon
2007-12-05 12:14
2007.12.30
Компонент типа "проводника"


2-1196976475
BD
2007-12-07 00:27
2007.12.30
Сортировка баз данных


4-1181649187
torin-sd
2007-06-12 15:53
2007.12.30
Нужно определить владельцев всех процессов