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

Ert*_*tan 8 c++ sdl

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

Pet*_*der 7

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

你的主线程做什么?我想象这样的事情:

  1. 更新逻辑
  2. 给予
  3. 转到1

如果在更新周期之后(或期间)收到输入,则必须等到下一个更新周期才能看到效果.渲染过程中也是如此.您也可以在更新周期之前检查输入并完成所有单线程.

  1. 输入
  2. 更新逻辑
  3. 给予
  4. 转到1

多线程在这里没有任何好处,只会增加复杂性.

有关一些补充阅读,请查看Christer Ericson关于输入延迟的博客文章(他是制造战争之神的团队的技术总监).


Sin*_*ion 5

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

SDL本质上不是一个中断或事件驱动的框架.IO通过调用SDL_WaitEvent或从事件队列中读取事件来实现SDL_PollEvent.这必须发生在" "线程中,即调用的线程SDL_SetVideoMode.

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