Bonjour !
J'ai un programme qui créé un
std::thread (norme C++11) qui exécute parallèlement une fonction modifiant ma
sf::RenderWindow créée dans le thread principal depuis le thread secondaire... Sauf que lorsque je tente depuis le thread secondaire de, par exemple, dessiner une
sf::RectangleShape, j'obtiens l'erreur suivante :
Failed to activate the window's contextVoici un code minimal pour illustrer l'erreur :
#include <iostream>
#include <thread>
#include <SFML/Graphics.hpp>
class GraphicThread
{
public:
GraphicThread(sf::RenderWindow& window) : myWindowRef(window)
{
}
void launch()
{
sf::Clock clock;
sf::RectangleShape shape(sf::Vector2f(50, 50));
shape.setFillColor(sf::Color::Black);
shape.setOrigin(25, 25);
while(clock.getElapsedTime().asSeconds() < 10) {
shape.setRotation(clock.getElapsedTime().asSeconds() * 30.f);
myWindowRef.clear();
myWindowRef.draw(shape);
myWindowRef.display();
}
}
~GraphicThread() {}
private:
sf::RenderWindow& myWindowRef;
};
int main(int argc, char **argv)
{
// Create window
sf::RenderWindow window(sf::VideoMode(800, 600), "Threads");
window.setVerticalSyncEnabled(true);
// Create graphic thread
GraphicThread gt(window);
// Launch thread
std::thread t(&GraphicThread::launch, >);
// Thread join
t.join();
// Close window
window.close();
return 0;
}
Merci d'avance !