Тема: AHK: Микротаймеры - создание периода менее 1000 микросекунд
Продолжая тему микротаймеров, нашел работу в которой придуман еще один микротаймер. Его период составляет тоже около 1 миллисекунды, и я подумал возможно ли добиться еще меньшей выдержки? Попробовав решить задачу вглубь (изменение кода драйвера) я потерпел крах т.к. не хватает знания, и тогда я решил схитрить:
что если создать два таймера (и более -если нужна еще меньшая выдержка) по 1 мс сместив их относительно друг друга на 500 мкс? Тогда частота повышается вдвое и в результате период станет 500мкс.
#SingleInstance force
#Persistent
#include CLR.ahk
asm := CLR_LoadLibrary("WaitableTimer\WaitableTimer.dll")
wt1 := asm.CreateInstance("WaitableTimer")
MyTimer1 := wt1.Create(Func("Test"), 1)
MyTimer1.Start() ;создаем первый таймер -1мс
loop
{
++ZX
if (ZX=1200) ;выдержка 500 мкс (кол-во циклов находим опытным путем)
{
ZX:=0
Break
}
}
wt2 := asm.CreateInstance("WaitableTimer")
MyTimer2 := wt2.Create(Func("Test"), 1)
MyTimer2.Start() ;через 500 микросекунд создаем второй таймер на 1 мс
return
Test(){ ;на выходе получаем частоту обращения в два раза выше(период 500 микросекунд вместо 1мс)
global
++DR
if (DR=1000)
{
stop:=A_TickCount,DR:=0
dT:=(stop-start)/1000
start:=A_TickCount
ToolTip, продолжительность периода=%dT%
}
Return
}
^Esc::
MyTimer.Stop()
ExitApp
P.S. Не забываем в свойствах разрешить работу драйвера.