os.sysdate()

Страницы: 1
RSS
os.sysdate()
 
os.time() меняется на несколько мс раньше os.sysdate()
Ниже разница между os.time() в момент смены секунды и os.sysdate() (при системном таймере 15.625 ms).

Код
  for i = 1, 10 do
    local t
    local t0 = os.time()
    repeat t = os.time() until t0 ~= t
    local s = os.sysdate()
    message(string.format("%.3f ms", 1000 * (t - os.time(s)) - s.mcs / 1000))
  end

Каждый блок - отдельный запуск скрипта в одном и том же терминале.
Скрытый текст
Скрытый текст
Скрытый текст
Скрытый текст

Почему при перезапуске скрипта дельта меняется?
 
Если также считать разницу между os.time() и os.clock(), то дельта не меняется при перезапуске скрипта.
 
При системном таймере 1 ms os.sysdate() "тикает" не равномерно.

Код
  local function difftime(t1, t2)
    return os.time(t1) - os.time(t2) + (t1.mcs - t2.mcs) / 1000000
  end

  local n = 0
  local sum = 0
  local max = 0
  local min
  while run do
    local t1 = os.sysdate()
    local t2 = os.sysdate()
    while t1.mcs == t2.mcs do t2 = os.sysdate() end
    local dt = difftime(t2, t1) * 1000
    --message(string.format("%.3f ms", dt))
    n = n + 1
    sum = sum + dt
    if dt > max then max = dt end
    if min == nil or dt < min then min = dt end
    sleep(1)
  end
  message(string.format("avg: %.3f;  max: %.3f;  min: %.3f", sum / n, max, min))

Результат в Win11:
Код
avg: 1.049;  max: 6.480;  min: 0.067
Т.е., шаг меняется от 67 мкс до 6,4 с
Страницы: 1
Читают тему
Наверх