Я написал небольшое приложение Python, в котором я использую PyGame для отображения простой графики.Обработка KeyboardInterrupt при работе с PyGame
У меня есть несколько простой цикл PyGame происходит в основании моего заявления, так как:
stopEvent = Event()
# Just imagine that this eventually sets the stopEvent
# as soon as the program is finished with its task.
disp = SortDisplay(algorithm, stopEvent)
def update():
""" Update loop; updates the screen every few seconds. """
while True:
stopEvent.wait(options.delay)
disp.update()
if stopEvent.isSet():
break
disp.step()
t = Thread(target=update)
t.start()
while not stopEvent.isSet():
for event in pygame.event.get():
if event.type == pygame.QUIT:
stopEvent.set()
Он работает все прекрасно и денди для нормального завершения программы; если окно PyGame закрывается, приложение закрывается; если приложение завершает свою задачу, приложение закрывается.
Проблема у меня есть, если я Ctrl - C в консоли Python, приложение выдает KeyboardInterrupt
, но продолжает работать.
Таким образом, возникает вопрос: что я сделал неправильно в моем цикле обновления и как его исправить, поэтому KeyboardInterrupt
заставляет приложение прекратить действие?
Это могло бы работать, если я также делаю то же самое внутри самой нити. Мне кажется немного странным, что я должен явно поймать KeyboardInterrupt. –
@Sebastian, KeyboardInterrupt всегда идет в основной поток, поэтому я не уверен, почему вы также должны поймать его во вторичных потоках. –
Действительно, похоже, что это не похоже на то, что я получил раньше. Возможно, мои файлы не синхронизированы. Благодарю. –