我在我的程序中使用sf::Thread
并在Windows中运行它,但现在我将它移植到Windows上。我已经制作了构建目标并且它已经成功编译,并且一直运行直到我尝试启动使用线程的游戏。然后我的对象被成功构建,但随后它说:
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
NumberHunterGame: xcb_io.c:179: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed.
我在我的程序中使用SFML 2.1直接从Fedora repos中获取。
我正在阅读一个关于将sf::RenderWindow
作为指针传递给我的渲染线程函数的论坛帖子,但我认为这不会产生任何影响,因为我将sf::RenderWindow
实例变为全局。我尝试在main的开头调用XInitThreads()
,但这会导致更多的问题然后解决。
整个文件可在此处获取:https://github.com/HSchmale16/NumberHunterGame/blob/master/main.cpp
编辑:我被问及如何设置线程,这是一般设计。
我在主线程中创建sf::RenderWindow
然后在主线程中停用,然后启动渲染线程。之后我启动游戏事件处理线程。主线程唯一处理的是窗口事件,所以它应该是线程安全的。 SFML文档说我可以在使用另一个线程进行渲染时处理主线程中的窗口事件。