Bonjour,
J'ai récemment commencé un programme avec beaucoup de choses a charger, et j'ai eu envie de rajouter une image qui tourne pour signaler ce chargement, seulement, pour que ce soit fluide, la seule solution que j'ai trouvée est d'afficher cette image dans un autre thread. Il y a donc un thread qui affiche une image qui tourne et le thread principal qui charge mes données. Problème, quand je tente d'afficher quelque chose avec le thread principal quand le chargement est fini (après avoir désactivé le thread et fait fenetre.setActive(true)), ca reste bloqué sur le sprite de chargement qui ne tourne plus...
Donc voila, je voudrais qu'on m'explique ou est mon erreur, ou bien une autre façon de faire ce sprite de chargement qui tourne.
Merci d'avance
#include <fstream>
#include <iostream>
#include <SFML/Graphics.hpp>
struct parametreLoad {
sf::RenderWindow* fenetre;
bool me;
};
void affichageChargement( parametreLoad* par ){
sf::Texture text;
text.loadFromFile( "a.png" );
sf::Sprite fond( text );
while( par->me == true ){
// C'est juste un code simplifié, le sprite ne tourne pas ici
par->fenetre->clear();
par->fenetre->draw( fond );
par->fenetre->display();
}
par->fenetre->setActive( false );
// Je desactive la fenetre dans le thread
}
int main(){
sf::RenderWindow fenetreTT( sf::VideoMode( 800, 450 ), "" );
fenetreTT.setActive( false );
bool me = true;
parametreLoad param;
param.fenetre = &fenetreTT;
param.me = me;
sf::Thread threadLoad( &affichageChargement, ¶m );
threadLoad.launch();
sf::Clock ma; while( ma.getElapsedTime().asSeconds() < 2 ){}
// Pour tester, le thread va m'afficher le sprite pendant 2 secondes
param.me = false;
// Normalement, le thread arrete d'afficher le sprite et desactive la fenetre
threadLoad.wait();
fenetreTT.setActive( true );
// Et je réactive la fenetre
fenetreTT.clear( sf::Color::Red );
ma.restart(); while( ma.getElapsedTime().asSeconds() < 2 ){}
// Et pour tester, je remplis ma fenetre de rouge pendant 2 secondes
}