Форум: "Основная";
Текущий архив: 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.031 c