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

C++ 使用SDL/C+;处理事件的最佳方式是什么+;,c++,sdl,C++,Sdl,我将SDL用于我的游戏项目的视图部分。我想在不中断主线程的情况下处理按键事件。所以我决定在另一个视图线程中运行一个无限循环,以捕获任何事件并通知主线程。但是,我不确定这是否是最好的,因为这可能会造成工作负载并降低系统性能?有没有更好的方法来做这类事情? 谢谢 我想在不中断主线程的情况下处理按键事件 SDL本质上不是一个中断或事件驱动的框架。IO通过调用SDL_WaitEvent或SDL_PollEvent从事件队列中读取事件来发生。这必须发生在“主”线程中,即调用SDL\u SetVideoMo

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

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

SDL本质上不是一个中断或事件驱动的框架。IO通过调用
SDL_WaitEvent
SDL_PollEvent
从事件队列中读取事件来发生。这必须发生在“主”线程中,即调用
SDL\u SetVideoMode
的线程


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

不要再麻烦其他线程了。重点是什么

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

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

  • 输入
  • 更新逻辑
  • 渲染
  • 转到1
  • 多线程在这里什么也得不到,只会增加复杂性


    要了解更多信息,请查看(他是《战神》团队的技术总监)。

    这一点,输入不是线程安全的。许多SDL教程都明确说明了这一点。