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

Вниз

задержка выполнения без нагрузки на проц   Найти похожие ветки 

 
Lena19   (2004-05-24 20:35) [0]

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


 
Ihor Osov'yak ©   (2004-05-24 21:02) [1]

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


 
Lena19   (2004-05-24 21:04) [2]

for n:= 1 to 999999999 do begin end;
нужно чтото типа етого но тока чтоб систему не нагружал


 
jack128 ©   (2004-05-24 21:15) [3]

Sleep(1000)


 
Ihor Osov'yak ©   (2004-05-24 21:25) [4]

Лен, не слушай Джека.. Он хороший, но такой выдумщик..

Наиболее верное решение - длинные цыклы вынести в отдельный поток.

Если же немного лень и приложенее VCL - в теле цыкла можно вызывать
Application.ProcessMessages. Но если нет четкого представления, что сия вещь делает - лучше не пользоваться. Чтобы не вникать в долгие обьяснения - скажу только, что есть опасность того, что будут запущены на обработку нажатия всяких кнопочек, и не только, еще до того, как цыкл окончит свою работу..

А Sleep - он просто текущий поток останавливает, а это не совсем  и не всегда то, что "задержка выполнения проги"..


 
Ihor Osov'yak ©   (2004-05-24 21:28) [5]

Ой, это я тормознул - не верно понял Lena19   (24.05.04 21:04) [2]

Верное решение - архитектура приложения должна быть такой, чтобы необходимости в таких вещах не возникало..

А так - таки слип. Или делать сихронизацию от какого-то таймера.


 
Lena19   (2004-05-24 22:25) [6]

всео OK sleep это как раз то что надо


 
jack128 ©   (2004-05-24 22:41) [7]


> Верное решение - архитектура приложения должна быть такой,
> чтобы необходимости в таких вещах не возникало..
э-э. А можно прояснить эту фразу?  Я, например, часто использую слип при работе с разными девайсами через ком-порт. Быает нужно вставлять разного рода задержки для коректной работы ...


 
Ihor Osov'yak ©   (2004-05-25 01:57) [8]

2 [7] jack128

А зачем там слип? Разного рода SetCommMask, WaitCommEvent уже отменили?
Ну а если все же возникает необходимость в слип, то, имхо, следует подумать о том, правильно ли спроектирован протокол обмена первым делом.  
Если же проектировщик протокола уже недосягаем на предмет разьяснения того, что о нем следует сказать - то все же слипать последнее дело. Хотя бы потому, что код должен быть прерываемым - а в случае увлечения слипами - это немного проблематично... Для такой ситуации можно пытаться создавать что-то наподобие конечного автомата..

Зы. с девайсами приходилось работать. И не только через ком-порты. Бывало, одиночные слипы порядка десяти миллисекунд использовал. Я не ортодокс :-)

Зы2. Приходилось и доводить к толку проекты, в которых предшетсвенник слипы для "синхронизации" использовал.. К счастью, предшедствеников тогда близко не было..


 
Германн ©   (2004-05-25 02:17) [9]

2 Ihor Osov"yak © (25.05.04 01:57) [8]
А кто тут, где тут говорил о "портах", "дивайсах" и т.д. и т.п.?


 
Ihor Osov'yak ©   (2004-05-25 02:26) [10]

2 [9] Германн ©   (25.05.04 02:17)

Не знаю, мне может [7] jack128 ©   (24.05.04 22:41) померещилось...


 
y-soft ©   (2004-05-25 08:33) [11]

for n:= 1 to 999999999 do begin end;

Это худшее, что можно придумать для временной задержки.
Лучше переводить поток в режим ожидания (Sleep(), SleepEx(), разные WaitXXX, WaitableTimer...). Если приложение однопоточное, то "засыпать" будет все приложение :)


 
jack128 ©   (2004-05-25 18:43) [12]


> Ihor Osov"yak ©   (25.05.04 01:57)
</Iесли все было так просто, то не было бы так сложно..Пример: связь идет через оптоголовку, которая непонятно как коверкое сигнал и отражает обратно..И чего я должен ждать? прихода символа? А что дальше? Ведь неизвестно сколько байт вернется в порт, их может контроль четности почикать.. В общем чем геморой разводить, можно просто поспать 100 мс, а потом очистить буфер порта..

Или вот. Теоритическая возможность использовать  WaitCommEvent - есть, более того я бы очень хотел воспользоваться этой функцией, если бы не одно но. Программа под WinCE а данная ось не поддерживает асинхронное чтение из порта. А рисковать повесить поток, чтобы потом TerminateThread"ить его если связь оборвется, сам понимаешь, неохота..

В общем бывает полезно поспать -) Я вообще спать люблю :-))



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

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

Наверх




Память: 0.5 MB
Время: 0.04 c
1-1085455823
пинг
2004-05-25 07:30
2004.06.06
Сжатие изображений при помощи нейронных сетей


1-1085485870
Dmitry
2004-05-25 15:51
2004.06.06
Как в RichEdit выравнить текст по ширине?


6-1081850108
Alexey_
2004-04-13 13:55
2004.06.06
Обработка ошибки компонента TNMHTTP


14-1085131447
blackman
2004-05-21 13:24
2004.06.06
На 22 мая


14-1085052644
Igor_thief
2004-05-20 15:30
2004.06.06
Путин подписал антихакерский указ