Sleep (1) приводит к бОльшим задержкам чем 1 мс.

Страницы: 1
RSS
Sleep (1) приводит к бОльшим задержкам чем 1 мс.
 
Странная особенность у функции sleep с параметром 1 миллисекунда.

в ticker_list 61 акция ММВБ
Код
for sec in string.gmatch(ticker_list,"%a+") do
без sleep (1)
скрипт
end
начало первого  прохода всех акций в тикер листе
04/11/16 16:50:11,109
начало второго прохода всех акий в тикер листе
04/11/16 16:50:11,296

Итого 187 миллисекунд

теперь то же самое, но уже со sleep (1)
Код
for sec in string.gmatch(ticker_list,"%a+") do
sleep (1)
скрипт
end
04/11/16 17:00:52,687
04/11/16 17:00:53,640

разница ПОЧТИ секунда!

откуда она берётся?
 
Без переключения кванта в оси нет смысла писать меньше sleep(10)
 
не понял Вашу мысль
переформулируйте пожалуйста по простому, для не программиста.
 
Цитата
Космонавт написал:
не понял Вашу мысль
переформулируйте пожалуйста по простому, для не программиста.

речь о том что системный таймер Windows имеет свое разрешение, равное 15 миллисекундам.
На microsoft есть статься на тему
https://msdn.microsoft.com/ru-ru/library/system.timers.timer.interval%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
 
ок
но Ваш ответ о другом
у меня вопрос почему при проходе 61 акции  sleep (1) даёт задержку не 61 миллисекунда, а гораздо больше.
 
Цитата
Космонавт написал:
ок
но Ваш ответ о другом
у меня вопрос почему при проходе 61 акции  sleep (1) даёт задержку не 61 миллисекунда, а гораздо больше.

потому что 61*15 = 915мс займет обработка цикла.
Если проще то sleep не может работать чаще чем ему разрешит операционная система.
Частоту системного таймера Windows можно изменить, но это на Ваш страх и риск и рассказывать как это делается мы не будем.
К слову если точнее, то частота системного таймера равна 15.625
 
Еще чуть проще ) - windows условно многозадачен, и у него по-умолчанию стоит ограничение - переключаться между задачами не чаще чем раз в 15 мск. Этот параметр можно изменить командой для WinAPI, взяв на себя риск возможной потери устойчивости / стабильности системы.
 
Цитата
green_X5 написал:
Еще чуть проще ) - windows условно многозадачен, и у него по-умолчанию стоит ограничение - переключаться между задачами не чаще чем раз в 15 мск. Этот параметр можно изменить командой для WinAPI, взяв на себя риск возможной потери устойчивости / стабильности системы.
Немного не так.
15 мс - это квант таймера. Поэтому минимальный sleep получается в 1 квант.
квант таймера можно изменить сделав его 1 мс.
Квант времени для задачи(потока) тоже можно настроить в количествах квантов таймера.
примерно так.
Страницы: 1
Читают тему
Наверх