如何避免事件驱动程序的忙等待循环?

How can a busy-wait loop be avoided for an event driven program?

我正在 python 使用 pygame 编写一个国际象棋游戏。一个常见的任务是需要处理事件,而我知道如何做的唯一方法是这样的:

while True:
    for event in pygame.event.get():  
        # handle event

while循环只保留spinning,效率低下。在嵌入式编程中,可以让 cpu 进入睡眠状态,直到有中断发生。有没有办法在 python 中做类似的事情,让循环等待事件?

pygame.time.Clock.tick (as covered in "") 可以限制每秒frames/iterations的数量,这不是我想要完成的。

Pygame不支持这样的中断,需要你自己获取事件。 然而,它们确实有一个时钟,允许您以设定的时间间隔执行操作,例如每秒 60 次。

处理事件也可以在主游戏循环中完成,这是您无论如何都需要的。

您可以使用这样的设置:

import pygame

class Game():
    def __init__(self):
        pygame.init()
        self.clock = pygame.time.Clock()

    def mainloop(self):
        while True:
            time = self.clock.tick(60)

            for event in pygame.event.get():
                # Handle events
                pass
            
            # Do other game calculations

我觉得你应该使用

pygame.event.wait()

Returns a single event from the queue. If the queue is empty this function will wait until one is created...While the program is waiting it will sleep in an idle state.

参见this documentation