3

我是 sfml 和 c++ 的新手。我有一个使用 sfml 库来绘制图形的项目,但是当我向我的程序添加一个额外的线程时,它无法执行线程内的代码。这是我的代码:(请帮助我!)

#include <SFML\Graphics.hpp>
#include <SFML\window.hpp>
#include <SFML\system.hpp>
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int h(sf::RenderWindow* win){
    //do something
    win->close();
    this_thread::sleep_for(chrono::milliseconds(10));
    return 0;
}


int main(){
    sf::RenderWindow window(sf::VideoMode(800,600),"My window");
    thread t1(h,&window);
    _sleep(10000000);
    t1.join();
    return 0;
}
4

1 回答 1

15

http://www.sfml-dev.org/tutorials/2.0/graphics-draw.php#drawing-from-threads

SFML 支持多线程绘图,你甚至不需要做任何事情来让它工作。唯一要记住的是在另一个线程中使用它之前停用一个窗口;这是因为一个窗口(更准确地说是它的 OpenGL 上下文)不能同时在多个线程中处于活动状态。

调用 window.setActive(false); 在你的 main() 中,在你将它传递给线程之前。

请记住,您必须在 GUI 线程(主线程)中处理事件以获得最大的可移植性。

于 2014-05-28T20:52:33.193 回答