Autohotkey 让第二个线程持续更新?

Autohotkey 让第二个线程持续更新?,autohotkey,Autohotkey,我试图在autohotkey中创建一个类似“心跳监视器”的东西 我目前的程序很简单,我有一个大约需要2秒钟才能完成的过程来计算哔哔声的尖锐程度,还有一个小的循环例程,以计算出的频率发出哔哔声 但是我现在遇到了一个障碍——我如何更新“蜂鸣器”程序来使用新的频率而不中断它的正常计时 我最初尝试的是有效地检查全局变量(我觉得这不太可能奏效) 但频率似乎永远不会更新(因为calculatefrequency再也不会运行),这是有道理的 因此,我的下一个方法是使用settimer的计时,但这远远不够一致

我试图在autohotkey中创建一个类似“心跳监视器”的东西

我目前的程序很简单,我有一个大约需要2秒钟才能完成的过程来计算哔哔声的尖锐程度,还有一个小的循环例程,以计算出的频率发出哔哔声

但是我现在遇到了一个障碍——我如何更新“蜂鸣器”程序来使用新的频率而不中断它的正常计时

我最初尝试的是有效地检查全局变量(我觉得这不太可能奏效)

但频率似乎永远不会更新(因为calculatefrequency再也不会运行),这是有道理的

因此,我的下一个方法是使用settimer的计时,但这远远不够一致

frequency := 500 ;super-global default frequency

Somehotkey::
SetTimer, BeepCycle, 500
Loop, 
{
   frequency := CalculateFrequency()
   Sleep, 5000
}
return

BeepCycle:
SoundBeep, %frequency%

在保持500毫秒间隔一致的同时,允许频率变化的最佳方法是什么?我不熟悉ahk中的多线程。

这要归功于自动热键论坛上的wolf_II——这是我迄今为止找到的最好的解决方案

使用两个计时器可以让他们彼此玩得更好(并避免评论中的睡眠问题)


这要归功于wolf_II在自动热键论坛上的表现——这是我迄今为止找到的最好的解决方案

使用两个计时器可以让他们彼此玩得更好(并避免评论中的睡眠问题)

frequency := 500 ;super-global default frequency

Somehotkey::
SetTimer, BeepCycle, 500
Loop, 
{
   frequency := CalculateFrequency()
   Sleep, 5000
}
return

BeepCycle:
SoundBeep, %frequency%
global frequency := 500 ; default frequency

Somehotkey::
SetTimer, BeepCycle, 500
SetTimer, CalcCycle, 5000
return

BeepCycle:
   SoundBeep, %frequency%
return


CalcCycle:
   frequency := CalculateFrequency()
return