Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Внизтаймер Найти похожие ветки
← →
Алексей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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.007 c