Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.056 c
14-1084981103
Piter
2004-05-19 19:38
2004.06.06
Преобразование числа в рубли и копейки


3-1084544113
kalliopiy
2004-05-14 18:15
2004.06.06
Про BLOB ы


3-1084528367
exe
2004-05-14 13:52
2004.06.06
Аналог IBExperta


1-1085335968
DIS
2004-05-23 22:12
2004.06.06
EoleSysError


14-1084961837
Senti
2004-05-19 14:17
2004.06.06
Работа для программиста... Нужна помощь





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский