【问题标题】:SDL2 running inside a non-main threadSDL2 在非主线程中运行
【发布时间】:2014-12-01 00:22:59
【问题描述】:

对于在这种情况下什么算作“主”线程有些困惑。

我在第一个阻塞的线程中运行了 QT。我想在辅助线程中运行 SDL2,所有调用和初始化都与该线程隔离。

这是否允许 SDL2 正确且稳定地运行,如文档所述,它需要在主线程中?这个问题SDL2 two windows in different threads 也指出您不能在“主”线程之外​​使用某些 SDL2 函数。

本例是主线程,就SDL2而言,第一个线程包含QT,还是第二个线程SDL2被初始化了?

【问题讨论】:

  • 这很可能是平台相关的。如果您改为创建您创建的第一个线程,那么您是安全的。在那个线程中,您可以在循环中调用 QCoreApplication::processEvents() 并轮询 SDL 事件,而不是使用 QCoreApplication::exec() 阻塞

标签: c++ multithreading sdl-2


【解决方案1】:

这只是一个猜测,但在 linux 中,“主线程”的概念是进程中的第一个线程。下面是如何查看一个线程是否是主线程:Check if current thread is main thread

所以要回答您的问题,您不能让 QT 作为第一个线程运行而 SDL2 作为第二个线程运行。你要么需要:

  1. 两个进程。然后,每个都运行一个主线程
  2. 将 SDL 作为第一个进程(主线程)运行,将 QT 作为子线程运行(如果 QT 允许这样做)

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2022-11-11
    • 2011-05-24
    相关资源
    最近更新 更多