Что нового

[Баг] Округление функции Sleep

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Заметил что Sleep() стал дискретным (в AutoIt v3.3.6.1 кажется этого не было). Например от1ms до 10 ms всегда равна 10ms, 11ms до 20ms всегда равна 20ms и т.д

Тест пример:
Код:
$ms = 1
While 1
	Sleep(100)
	$ms = InputBox("  ", "Тестируемое время в ms", $ms)
	Select
		Case @error = 1
			Exit
	EndSelect


	$st = TimerInit();1 тест Sleep()
	For $i = 1 To 5
		Sleep($ms)
	Next
	$t1 = Round(TimerDiff($st) / 5, 0)


	$st = TimerInit();2 тест через TimerDiff()
	For $i = 1 To 5
		_Sleep($ms)
	Next
	$t2 = Round(TimerDiff($st) / 5, 0)


	MsgBox(0, '', 'Длительность Sleep()' & @CR & $ms & 'ms =: ' & $t1 & 'ms' & @CR & @CR & 'Длительность TimerDiff()' & @CR & $ms & 'ms =: ' & $t2 & 'ms')
	$ms += Random (6,9,1)
WEnd



Func _Sleep($time_Sleep)
	Local $st_Sleep = TimerInit()
	While 1
		If TimerDiff($st_Sleep) >= $time_Sleep Then
			ExitLoop
		EndIf
	WEnd
EndFunc   ;==>_Sleep
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
Re: [Баг] Дискретность функции Sleep

А почему дискретность?
Скорее округление.

Да, проблема есть, и в ранних версиях также было.

P.S.
Sleep через Timer* для одной мс это не выход, т.к это даёт нагрузку на процессор.
 
Верх