python - 布尔变量上的select()

时间:2013-05-29 19:31:11

标签: python select boolean pygame midi

我需要在bool上使用select(),因为模块pygame.midi只会通过返回bool的函数Input.poll()让你知道midi消息何时就绪。

如果我以简单的方式检查这个值,我会忙着等待,我的cpu一直在100%工作。

有没有办法使用select()或类似的函数来等待变量在上下文中更改其值而不自动事件提升?

(我并不一定要活得无所事事,我确实很乐意使用它们,但我无法在套餐中的任何地方看到midi事件..)

2 个答案:

答案 0 :(得分:2)

开发游戏时,您通常会在主循环中执行所有操作。如果你想要,例如50 fps,那么你想要每秒50x这个循环。如果你认为你没有做任何耗费时间,那么你可以在每次迭代结束时睡20ms。

所以我认为这就是为什么只有民意调查可用,你应该检查你的循环中是否加载了midi。如果是,那么你可以用它做一些事情,否则你会继续渲染或做其他事情。通常在创建应具有一致fps的游戏和应用程序时,您不希望等待某些事件。

答案 1 :(得分:0)

如果您的输入无法触发事件,则必须在计时器上进行检查。

在大多数游戏中,您的主事件循环已经有一些“帧限制器”代码,因此事件循环运行时间不超过50次/秒。因此,每个事件循环只需poll一次。如果没有,你现在必须添加一个帧限制器。

如果你的游戏由于某种原因不符合这个范例 - 或者如果你需要比你的最大帧速率更频繁地轮询输入 - 你必须编写一个从输入中读取的后台线程(如果可能的话阻塞,如果没有则轮询和休眠)并直接处理事件,或者推送到主线程每次循环读取的队列。