繁体   English   中英

是否有解决方法可以在单独的线程中清空事件队列?

[英]Is there a workaround to empty event queue in separate thread?

我使用一个单独的线程在 Ubuntu 上调用pygame.event.get()没有任何问题。 然而,MacOS 会抛出异常'NSInternalInconsistencyException', reason: 'nextEventMatchingMask should only be called from the Main Thread!' ; 并且 Windows 在正常执行几秒钟后报告窗口为(Not answering) ,我认为这有相同的解释,这意味着与其他操作系统不同,Linux 可以容忍这种软件设计。

是否有任何解决方法可以在单独的线程中保持清空事件队列,或者这是否基本上意味着 python 2.7 上的 pygame 1.9.1 根本无法以这种方式工作?

我知道 GUI 事件通常在主线程中处理,但我的 Python 库旨在与 ipython 一起使用。 根据设计,主线程,即用户的 ipython 单元可能不执行任何操作或 CPU 贪婪循环,因此它无法处理pygame.event.get()

只能从其他线程发布事件,但事件队列必须在主线程中处理。 请参阅pygame.event的文档:

[...] 事件子系统应该从主线程调用。 [...]

但是,如果您继续阅读

[...] 如果您想从其他线程将事件发布到队列中,请使用pygame.fasteventpygame模块与事件和队列模块进行交互。 [...]

参见pygame.fastevent模块:

pygame.fastevent是 Bob Pendleton 的fastevent库的包装器。 它提供了用于多线程环境的快速事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM