Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1196966533
ВаняЯ
2007-12-06 21:42
2007.12.30
Вопрос про ООП


2-1196767896
Kolan
2007-12-04 14:31
2007.12.30
Как запретить авто удаление наследнику TInterfacedObject?


15-1195982608
Иван Д.
2007-11-25 12:23
2007.12.30
Гиперкуб


2-1196692582
..::KraN::..
2007-12-03 17:36
2007.12.30
TImage на рабочий стол


2-1196961000
FoxM
2007-12-06 20:10
2007.12.30
Как скрыть статус соединения с Интернетом с TrayBar?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский