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

时间:2010-11-13 23:46:43

标签: c++ sdl

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

2 个答案:

答案 0 :(得分:7)

不要打扰另一个线程。有什么意义?

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

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

    1. 输入
    2. 更新逻辑
    3. 渲染
    4. 转到1
    5. 多线程在这里没有任何好处,只会增加复杂性。

      对于一些额外的阅读,请查看Christer Ericson's blog post about input latency(他是制造战争之神的团队的技术总监)。

答案 1 :(得分:5)

  

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

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

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