使用SDL/C++处理事件的最佳方式是什么

问题描述:

我使用SDL作为我的游戏项目的视图部分。我想在不中断主线程的情况下处理按键事件。所以我决定在另一个视图线程中运行一个无限循环来捕获任何事件并通知主线程。但是,我不确定这是否是最好的,因为这可能会导致工作量并降低系统性能?有没有更好的方法来做这种事情? 谢谢。使用SDL/C++处理事件的最佳方式是什么

不要打扰另一个线程。重点是什么?

你的主线程做了什么?我想是这样的:

  1. 更新逻辑
  2. 渲染
  3. 转到1

如果之后(或期间)接收输入的更新周期,那么你必须要等到下一次更新在你看到效果之前进行循环。渲染过程中也是如此。您也许只需在更新周期之前检查输入,然后全部执行单线程操作。

  1. 输入
  2. 更新逻辑
  3. 渲染
  4. 转到1

多线程这里获得什么,只是增加了复杂性。

对于一些增加的阅读,检查出Christer Ericson's blog post about input latency(他是使战神的团队的技术主管)。

+0

这和输入不是线程安全的。许多SDL教程都明确声明了这一点。 – new123456 2011-07-18 22:35:10

我想在不中断主线程的情况下处理按键事件。

SDL本质上不是中断或事件驱动框架。通过调用SDL_WaitEventSDL_PollEvent来从事件队列中读取事件,从而发生IO。这必须发生在“main”线程中,该线程调用SDL_SetVideoMode

这并不是说您不能使用多个线程,并且这样做有很好的理由,例如,如果不需要依赖SDL事件循环,它可以简化网络通信。如果您希望模拟发生在单独的线程中,则它可以通过同步的共享对象来回传递信息。特别是,您可以始终将事件安全地从任何线程放入SDL事件队列中。