1

Тема: AHK: Sleep короче 10 мс

Да, спасибо, я читал https://www.autohotkey.com/docs/v1/lib/Sleep.htm и видел пример с изменением параметра timeBeginPeriod и вызова Sleep через DLL.

Два вопроса.
- Есть ли еще какие то способы получить короткие значения Sleep из AHK?
- В оболочке логитеха G-Hub для игровой переферии в сценарии Lua короткие задержки реализуются через вызов следующей подпрограммы:

function Sleep_Short(time)
    local a = GetRunningTime()
    while GetRunningTime()-a < time do
    end
end

Ни кто не знает, насколько данное решение в Lua сходна с AHK решением из примера в статье про Sleep?

SetBatchLines -1  ; Ensures maximum effectiveness of this method.

SleepDuration := 1  ; This can sometimes be finely adjusted (e.g. 2 is different than 3) depending on the value below.
TimePeriod := 3 ; Try 7 or 3.  See comment below.
; On a PC whose sleep duration normally rounds up to 15.6 ms, try TimePeriod:=7 to allow
; somewhat shorter sleeps, and try TimePeriod:=3 or less to allow the shortest possible sleeps.

DllCall("Winmm\timeBeginPeriod", "UInt", TimePeriod)  ; Affects all applications, not just this script's DllCall("Sleep"...), but does not affect SetTimer.
Iterations := 50
StartTime := A_TickCount

Loop %Iterations%
    DllCall("Sleep", "UInt", SleepDuration)  ; Must use DllCall instead of the Sleep command.

DllCall("Winmm\timeEndPeriod", "UInt", TimePeriod)  ; Should be called to restore system to normal.
MsgBox % "Sleep duration = " . (A_TickCount - StartTime) / Iterations

2

Re: AHK: Sleep короче 10 мс

RacalCucumber пишет:

Есть ли еще какие то способы получить короткие значения Sleep из AHK?

Сам AHK или LUA тут не при чём, минимальный интервал зависит от разрешения системного таймера, которое в обычном режиме соответствует примерно 15 мс. Winapi функция timeBeginPeriod может уменьшить это разрешение (что вызывает повышенную нагрузку на систему).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder