Добро пожаловать в мир параллелизма (в некоторой степени)!
Представьте, что ваша программа работает: инструкции выполняются одна за другой в том порядке, в котором они написаны, в соответствии с потоком выполнения, который они выполняют.определить с исключением из shutterPressed
, которое выполняется асинхронно ( возможно ).
Поэтому представьте, что мы входим в цикл и находимся в первой строке <here>
:
while True:
global shutterHasBeenPressed
shutterHasBeenPressed = False # <here>
#Stay in loop until button is pressed
if shutterHasBeenPressed is False:
i += 1
if i == blink_speed:
overlay_2.alpha = 255
elif i == (2 * blink_speed):
overlay_2.alpha = 0
i = 0
#Restart while loop
sleep(0.1)
continue
#button has been pressed!
print("Button Pressed!")
Теперь для shutterHasBeenPressed
установлено значение False
, и проверяется следующее условие, и мы вводим if
.
, программа продолжает работать до, неожиданно, кнопка нажата.Скажем, он достиг <here>
:
while True:
global shutterHasBeenPressed
shutterHasBeenPressed = False
#Stay in loop until button is pressed
if shutterHasBeenPressed is False:
i += 1
if i == blink_speed:
overlay_2.alpha = 255 # <here>
elif i == (2 * blink_speed):
overlay_2.alpha = 0
i = 0
#Restart while loop
sleep(0.1)
continue
#button has been pressed!
print("Button Pressed!")
В этот момент shutterPressed
запускается, устанавливает shutterHasBeenPressed
в True
.Затем, снова в нашем цикле, итерация заканчивается, мы continue
в начале цикла и ... что там?!
shutterHasBeenPressed = False
и нажатие кнопки просто осталось незамеченным!
Я считаю, что это отвечает на ваш вопрос, спрашивая, в чем вы ошиблись.