Получение второго потока для обновления последовательно? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать своего рода "монитор сердцебиения" в autohotkey.

Моя текущая программа проста, у меня есть процесс, который занимает около 2 секунд, чтобы вычислить, насколько резкими должны быть звуковые сигналыи небольшая подпрограмма зацикливания, которая подает звуковой сигнал с вычисленной частотой.

Но теперь я наткнулся на контрольно-пропускной пункт - как я могу обновить подпрограмму "бипер", чтобы использовать новую частоту, не прерывая ее регулярное время?

То, что я сначала попробовал, - это эффективная проверка глобальных переменных (что, по моему мнению, вряд ли сработает)

frequency := 500 ;super-global default frequency

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

BeepCycle:
loop,
{
   SoundBeep, %frequency%
   Sleep, 500
}

, но частота, похоже, никогда не обновляется (потому что возбуждает вычисление частоты), чтоимеет некоторый смысл.

Таким образом, мой следующий подход состоял в том, чтобы вместо этого использовать синхронизацию с помощью settimer, но она просто не была достаточно последовательной.

frequency := 500 ;super-global default frequency

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

BeepCycle:
SoundBeep, %frequency%

Каков наилучший способ разрешить изменение частоты при сохранении 500 мсперерывы соответствуют?Я новичок в многопоточности в ахк.

1 Ответ

0 голосов
/ 23 февраля 2019

Благодарю wolf_II на форумах autohotkey - вот лучшее решение, которое я нашел до сих пор.

Использование двух таймеров позволяет им лучше играть друг с другом (и избегает спящего вопроса из комментариев)

global frequency := 500 ; default frequency

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

BeepCycle:
   SoundBeep, %frequency%
return


CalcCycle:
   frequency := CalculateFrequency()
return
...