布尔变量上的python-select()

布尔变量上的python-select(),python,select,boolean,pygame,midi,Python,Select,Boolean,Pygame,Midi,我需要在bool上使用select(),因为pygame.midi模块仅通过返回bool的函数Input.poll()才能让您知道midi消息何时准备就绪 如果我用简单的方法检查这个值,我会忙着等待,我的cpu总是100%工作 有没有一种方法可以使用select()或类似函数在上下文中等待变量更改其值而不自动引发事件 (我并不严格要求无事件的生活,事实上我很想使用它们,但我在包中的任何地方都看不到midi事件。在开发游戏时,您通常在主循环中完成所有操作。如果你想要50 fps,那么你需要每秒通过

我需要在bool上使用
select()
,因为pygame.midi模块仅通过返回bool的函数
Input.poll()
才能让您知道midi消息何时准备就绪

如果我用简单的方法检查这个值,我会忙着等待,我的cpu总是100%工作

有没有一种方法可以使用
select()
或类似函数在上下文中等待变量更改其值而不自动引发事件


(我并不严格要求无事件的生活,事实上我很想使用它们,但我在包中的任何地方都看不到midi事件。

在开发游戏时,您通常在主循环中完成所有操作。如果你想要50 fps,那么你需要每秒通过这个循环50次。如果您假设您没有做任何耗时的事情,那么您可以在每次迭代结束时睡眠20毫秒


所以我认为这就是为什么只有poll可用的原因,你应该检查midi是否加载到你的循环中。如果是,则可以使用它执行某些操作,否则将继续渲染或执行其他操作。通常,在创建具有一致fps的游戏和应用程序时,您不想等待某个事件。

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

在大多数游戏中,主事件循环已经有一些“帧限制器”代码,因此事件循环的运行速度不超过50次/秒。因此,您可以对每个事件循环进行一次轮询。如果没有,您现在就必须添加一个帧限制器


如果您的游戏因某种原因不符合此范例,或者如果您需要轮询输入的频率远远高于您的最大帧速率,则必须编写一个后台线程,从输入读取(如果可能,则阻塞,如果不可能,则轮询和休眠),并直接处理事件,或者将其推送到主线程每次通过循环都可以读取的队列上。

你的意思是?如果是这样,你就不能这样做;它只需要文件句柄。还有,这会有什么帮助?它会立即返回,或者永远阻塞,所以您仍然会遇到与开始时相同的问题。另外,谁来更改变量的值?不管是什么代码,您都可以让它调用您的函数。@abarnert pygame.midi不是他想要的代码change@cmd:但是
pygame.midi
不会更改变量的值。因此,必须是他的代码调用它的
read
poll
函数来更改值,并且该代码可以很容易地直接调用他的函数。感谢我通过每个周期等待几毫秒来解决问题,我不是在开发游戏,而是一个midi“翻译器”这会改变midi设备的行为,并将midi发送到iTizers中的软件,因此我没有fps的限制,我想要的是当有人触摸midi设备时能够“唤醒”我的程序的东西,但等待10毫秒基本上足以让pc运行得非常好,翻译器反应迅速