Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [RESOLU][SFML2]Communication avec mon Thread  (Lu 3001 fois)

0 Membres et 1 Invité sur ce sujet

Oragon Efreet

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
[RESOLU][SFML2]Communication avec mon Thread
« 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 :)
« Modifié: Avril 19, 2012, 08:46:13 am par Oragon Efreet »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2]Communication avec mon Thread
« Réponse #1 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.
Laurent Gomila - SFML developer

Oragon Efreet

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Re : [SFML2]Communication avec mon Thread
« Réponse #2 le: Avril 19, 2012, 08:45:58 am »
Ah vi, je l'avais sautée celle là.
Merci :)