std :: thread.join()和SFML不兼容?

时间:2014-07-18 13:21:59

标签: c++ multithreading c++11 sfml

我有一个错误,我不明白使用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实例,则错误消失。

任何想法?

编辑2:更新的构建日志

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))

1 个答案:

答案 0 :(得分:0)

我正在使用TDM-GCC-481TDM-GCC-471编译的SFML(可供下载的版本)。

我尝试安装TDM-GCC-471,但它没有识别std :: thread。

所以我用TDM-GCC-481重新编译了SFML(由于SFML教程和cmake,非常很容易做到),现在错误消失了。

相关问题