Мне кажется, что вы устанавливаете переменную, чтобы определить, когда должен сработать дремлющий будильник, , но затем никогда не обновляете будильник, чтобы он сработал в это время .
Давайтепросмотреть код с некоторыми примерами данных:
You have 1 alarm set to go off at 10/5/2018 12:01:00 PM and current state is on.
The current time is 10/5/2018 12:00:59 PM.
The snooze time is 1/1/0001 12:00:00 AM.
Первый раз в цикле: Тревога не соответствует текущему времени, поэтому ни один из блоков if не используется.Программа спит в течение 1 секунды.Ваши данные выглядят так:
You have 1 alarm set to go off at 10/5/2018 12:01:00 PM and current state is on.
The current time is 10/5/2018 12:01:00 PM.
The snooze time is 1/1/0001 12:00:00 AM.
Теперь цикл запускается снова.Первый блок if ударил (время будильника совпадает с текущим временем (обратите внимание, что состояние будильника здесь не проверяется, возможно, ошибка?). Время повтора устанавливается на 5 секунд в будущем, и состояние будильникаустановите значение повтора. Таким образом, после этого, если блокировать, ваши данные будут такими:
You have 1 alarm set to go off at 10/5/2018 12:01:00 PM and current state is snooze.
The current time is 10/5/2018 12:01:00 PM.
The snooze time is 10/5/2018 12:01:05 PM.
Второй блок блока теперь проверен. Сначала мы проверяем время будильника (12:01:00 PM)соответствует времени повтора (12:01:05 PM). Нет, не соответствует, поэтому мы пропускаем блок if.
Давайте перепрыгнем через несколько итераций цикла туда, где время равно 12:01.: 17:00 (ни один из блоков if не будет достигнут за это время). Таким образом, ваши данные выглядят так:
You have 1 alarm set to go off at 10/5/2018 12:01:00 PM and current state is snooze.
The current time is 10/5/2018 12:01:05 PM.
The snooze time is 10/5/2018 12:01:05 PM.
Первый, если блок не попадет (время будильника 12: 01: 00 PM не соответствует текущему времени 12:01:05.) Как насчет второго блока if (тот, который вы ожидаете ударить)? Сначала включается время будильника (12:01:00 PM).соответствовать времени повтора (12:01:05 PM) Нет, поэтому будильник никогда не выключается (ваша текущая логика делает так,когда-либо совпадать).
Я подозреваю, что вам нужно сделать что-то вроде этого (псевдокод, чтобы вы могли выяснить особенности для себя):
//this is within your loop
if alarm matches the current time and the alarm state is on
calculate the snooze time
set the alarm's time to go off to the snooze time
set the alarm's state to snooze
if alarm matches current time and the alarm state is snooze
shut the alarm off