我有一个错误,我不明白使用std :: thread和SFML2.1。
使用DevCPP + TDM-GCC进行开发时没有出现此错误,但我现在使用Code :: Blocks + TDM-GCC(Windows 7)。
基本上我没有任何编译错误/警告,但如果我在主程序中实例化了SFML RenderWindow,我得到一个程序没有响应线程连接。
我试图询问我们的谷歌朋友他是否对此有所了解,但它没有找到任何有帮助的结果,通过使用Code :: Blocks重新编译SFML,“只是为了确保”......
这是一段非常简化的代码,我仍然得到了错误(我已经设法在SFML中获得了一个带有纹理和文本的窗口,只是为了除了SFML库配置问题):
#include <SFML/Graphics.hpp>
#include <thread>
#include <iostream>
int main(int, char const**)
{
std::thread my_thread([](){
std::cout<<"toto"<<'\n';
});
my_thread.join();
//my_thread.detach();
std::cout<<"tata"<<'\n';
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
return EXIT_SUCCESS;
}
如果我将my_thread.join()
替换为my_thread.detach()
,则错误就会消失。
如果删除RenderWindow实例,则错误消失。
任何想法?
mingw32-g++.exe -std=c++11 -Wall -pthread -lpthread -std=c++11 -g -pthread -IC:\SFML-2.1\include -Ijabos -IC:\SFML-2.1\include -c C:\Users\frup82554\Documents\svn\jabos\jabos\main.cpp -o jabos.cb\obj\Debug\jabos\main.o
mingw32-g++.exe -LC:\SFML-2.1\lib -LC:\SFML-2.1\lib -o jabos.cb\bin\Debug\jabos.exe jabos.cb\obj\Debug\jabos\Couple.o jabos.cb\obj\Debug\jabos\Force.o jabos.cb\obj\Debug\jabos\main.o jabos.cb\obj\Debug\jabos\Masse.o jabos.cb\obj\Debug\jabos\Masse1d.o jabos.cb\obj\Debug\jabos\ThreadPool.o jabos.cb\obj\Debug\jabos\ValeurNDimension.o -lpthread -pthread -lpthread -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lsfml-graphics-d -lsfml-window-d -lsfml-system-d
Output file is jabos.cb\bin\Debug\jabos.exe with size 1.62 MB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 0 warning(s) (0 minute(s), 1 second(s))
答案 0 :(得分:0)
我正在使用TDM-GCC-481
为TDM-GCC-471
编译的SFML(可供下载的版本)。
我尝试安装TDM-GCC-471
,但它没有识别std :: thread。
所以我用TDM-GCC-481
重新编译了SFML(由于SFML教程和cmake,非常很容易做到),现在错误消失了。