Добро пожаловать в мир параллелизма (в некоторой степени)!
Просто представьте, что ваша программа работает: инструкции выполняются одна за другой в том порядке, в котором они написаны, в соответствии с потоком выполнения, который они выполняют. определить за исключением из 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
и нажатие кнопки просто осталось незамеченным!
Я считаю, что это отвечает на ваш вопрос, спрашивая, в чем вы ошиблись. [+1121]
Вы могли также представить ограничение, еще более трудное, чем Marc Gravell и Freddy Rios.
что-то как "en|de|fr|es". Это означало бы жесткое кодирование языки, но обычно они - немногие и известный.
Маршруты будут соответствовать, по умолчанию, слева направо, таким образом, "домен/дом/индекс" будет соответствовать сначала к lang=domain, controller=index, действие (значение по умолчанию для индексации), идентификатор (значение по умолчанию к 0/аннулировать).
Для фиксации этого я полагаю, что можно указать regex на MapRoute (соответствие, например, языки точно с 2 символами) - это изменилось в какой-то момент, хотя... (извините, никакой IDE в данный момент, таким образом, я не могу проверить точно).
Из памяти это могло бы быть:
routes.MapRoute( "DefaultLocalized",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = "",},
new { lang = "[a-z]{2}" }
);
Обратите внимание, что Вы, вероятно, не собираетесь хотеть, чтобы каждое действие взяло "строку Ленг", таким образом, необходимо обработать часть "Ленга" маршрута или в основном контроллере или в фильтре действия (в любом случае, по-видимому, добавьте информацию к ViewData).
Добавьте ограничение как новое {Ленг =" [a-z] {2} "}.
Кроме того, отбросьте значение по умолчанию Ленг = "en". Если Вы не сделаете, то маршрутизация захватит правило языка при просмотре его без него. Таким образом, если бы Вы смотрите на домен, и Вы выбираете О, он использовал бы domain/en/Home/About вместо более простого домена/Дома/О