C++ Linux上带有SFML的线程
我尝试将我在PC上的Visual Studio中开发的SFML项目移植到使用Eclipse的Linux上。最后,除了std::thread之外,一切都正常。我只是将其用于一个简单的渲染线程,代码在Windows上的Visual Studio中工作。但当我尝试运行代码时:C++ Linux上带有SFML的线程,c++,linux,eclipse,multithreading,c++11,C++,Linux,Eclipse,Multithreading,C++11,我尝试将我在PC上的Visual Studio中开发的SFML项目移植到使用Eclipse的Linux上。最后,除了std::thread之外,一切都正常。我只是将其用于一个简单的渲染线程,代码在Windows上的Visual Studio中工作。但当我尝试运行代码时: std::线程渲染读取(渲染) 在Eclipse中的Linux上,存在一个错误: [xcb]排队时队列中存在未知请求 [xcb]这很可能是一个多线程客户端,并且没有调用xinithreads [xcb]正在中止,很抱歉
std::线程渲染读取(渲染)代码>
在Eclipse中的Linux上,存在一个错误:
[xcb]排队时队列中存在未知请求
[xcb]这很可能是一个多线程客户端,并且没有调用xinithreads
[xcb]正在中止,很抱歉
即使我在创建线程之前添加了一个“XInitThreads()”调用,启动几秒钟后也会显示相同的错误消息。
我已经链接了pthread库,并在编译器选项中添加了“-pthread”。
提前感谢所有建议和各种帮助。
编辑:
代码段:
XInitThreads();
sf::ContextSettings settings;
settings.depthBits = 32;
settings.stencilBits = 32;
window.create(sf::VideoMode(1120, 630), "TITLE", sf::Style::Default, settings);
window.setVerticalSyncEnabled(true);
window.clear(COLOR);
window.display();
initStartup(); //loading Resources (.png, font...)
startscreen->phaseStarted = myClock.getElapsedTime().asMilliseconds();
window.setActive(false);
sf::Thread renderThread(render);
renderThread.launch();`
编辑2:
我注释掉了我的事件处理循环while(window.pollEvent(event)){
还有一个sf::Mouse::getPosition(窗口)
调用
错误消失了。您使用的GUI库是什么?看起来它在调用XInitThreads()之前调用了一些Xlib函数.-XInitThreads应该是第一个调用哪个编译器和使用哪个版本的Xlib函数?另一个解决方案可能是使用sf::Thread而不是std::Thread。我使用G++编译器。我第一次尝试使用sf::Thread,但它也不起作用。我没有直接使用任何Xlib调用。但我不知道SFML是否调用Xlib函数。也许at link可以帮助您: