Forum de la communauté SFML

Aide => Système => Discussion démarrée par: Oragon Efreet le Avril 19, 2012, 12:43:09 am

Titre: [RESOLU][SFML2]Communication avec mon Thread
Posté par: Oragon Efreet le Avril 19, 2012, 12:43:09 am
Bonsoir,

J'avoue ne pas du tout être habitué au développement multi-thread, aussi je ne comprends pas beaucoup comment arriver à mes fins.
Le code ci dessous lance un thread qui boucle, en attendant que le champ "valeur" passe à 0. Ceci était facilement faisable avec un héritage de sf::Thread dans l'ancienne version de SFML.
Mais maintenant le constructeur de sf::Thread prend en paramètre une copie de l'objet-foncteur. Je n'ai plus la main sur le champ "valeur" qu'il faut et je ne peux plus arrêter ma boucle.

class MaClasse
{
        public:
               
                // Constructeur
                MaClasse(int p) : valeur(p)     {}

                // Point d'entrée
                void operator()()
                {
                        while(valeur != 0)
                                std::cout << "P doit valoir 0 pour quitter" << std::endl;
                }

                // Champ interne
                int valeur;

};



int main(int argc, char* argv[])
{
        MaClasse vClasse = 10;
       
        sf::Thread vThread(vClasse);
        vThread.launch();

        vClasse.valeur = 0;

        return 0;
}
 

Je me demande donc.. comment modifier les valeurs de l'objet MaClasse de mon thread depuis le main ?

A plus tard :)
Titre: Re : [SFML2]Communication avec mon Thread
Posté par: Laurent le Avril 19, 2012, 07:52:21 am
Là tu passes une copie de l'instance, donc celle que tu modifies dans le main() n'a aucun effet sur celle qui est utilisée dans le thread.

N'utilise pas un foncteur si tu veux vraiment bosser sur une instance particulière de la classe, utilise plutôt le constructeur de sf::Thread qui prend en paramètre une fonction membre + un pointeur sur l'instance.
Titre: Re : [SFML2]Communication avec mon Thread
Posté par: Oragon Efreet le Avril 19, 2012, 08:45:58 am
Ah vi, je l'avais sautée celle là.
Merci :)