我使用一个单独的线程在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 lib旨在与ipython一起使用。按照设计,主线程,即用户的ipython单元可能不执行任何操作或CPU贪婪的循环,因此它无法处理pygame.event.get()
。
答案 0 :(得分:0)
只能从其他线程发布事件,但事件队列必须在主线程中处理。请参阅 pygame.event
的文档:
[...] 事件子系统应该从主线程调用。 [...]
但是,如果您继续阅读
<块引用>[...] 如果您想从其他线程将事件发布到队列中,请使用 pygame.fasteventpygame
模块与事件和队列模块进行交互。 [...]
参见pygame.fastevent
模块:
pygame.fastevent
是 Bob Pendleton 的 fastevent 库的包装器。它提供了用于多线程环境的快速事件。