我可以从第二个线程添加pygame事件吗

6 投票
1 回答
968 浏览
提问于 2025-04-17 19:50

我在很多地方看到说,pygame的事件处理必须在主线程中进行。我想这样做,但我有个问题,就是我能不能从其他线程往事件队列里添加事件?

我想在一个不同的线程中调用 pygame.event.post(myEvent),然后在主循环中处理这个事件。这可能吗?

补充说明一下,我想开一个单独的线程来处理异步的网络输入输出。当有新消息到达时,这个线程就会往事件队列里放一个事件,来提醒主线程有事情要做。

1 个回答

8

是时候来点侦探工作了!

查看一下 event_post 的源代码,发现它在 event.c 文件里,里面的 C 函数使用了一个叫 SDL_PushEvent 的调用,但它自己并没有检查线程安全性。不过,关于 SDL_PushEvent 的文档上说:

这个函数是线程安全的,可以安全地从其他线程调用。

所以看起来它确实是线程安全的。

撰写回答