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

Auteur Sujet: Dessin et évenements dans 2 threads  (Lu 1621 fois)

0 Membres et 1 Invité sur ce sujet

Mortirey

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
    • E-mail
Dessin et évenements dans 2 threads
« le: Octobre 22, 2014, 03:07:50 pm »
Bonjour,
J'ai un petit soucis concernant les threads. Je voudrais faire un programme où le thread de rendering n'est pas dans le thread principal. J'ai lu le tutoriel SFML(2.1) pour dessiner dans un thread mais lorsque je veux l'utiliser il y a une erreur concernant le multi-threading et XInitThread.

Dans mon code la fenêtre est bien créée dans le thread principal ainsi que le event handling. La fenêtre est mise inactive après appel de son constructeur.

L'erreur disparait lorsque la boucle d'évenement est placée dans la boucle de rendering:
void renderingFunction(sf::RenderWindow* window) {
        while (window->isOpen()) {
                while (window->pollEvent(event)   {
                        /* code */
                }
                /* code */
                window->display();
        }
}
 

Le constructeur de la fenêtre est toujours placé dans le thread principal. Je ne comprends pas pourquoi ça ne colle pas avec ce qui est écrit dans le tutoriel.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessin et évenements dans 2 threads
« Réponse #1 le: Octobre 22, 2014, 03:14:27 pm »
Il faut que tu appelles XInitThread (fonction de la Xlib) au début de ton main().
Laurent Gomila - SFML developer

Mortirey

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
    • E-mail
Re : Dessin et évenements dans 2 threads
« Réponse #2 le: Octobre 22, 2014, 04:21:05 pm »
Merci, ça marche !
Mais pourquoi faut-il faire ça ? Est-ce parce que les deux threads se disputent la fenêtre ?
Est-ce que cette méthode risque de poser des soucis de portabilité ?


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessin et évenements dans 2 threads
« Réponse #3 le: Octobre 22, 2014, 04:37:48 pm »
Citer
Mais pourquoi faut-il faire ça ? Est-ce parce que les deux threads se disputent la fenêtre ?
Non, c'est parce que Xlib n'est pas thread-safe par défaut, et qu'il faut appeler cette fonction pour qu'elle le soit. Note que dans un monde parfait ce serait à SFML de le faire, et toi tu ne devrais même pas t'en soucier.

Citer
Est-ce que cette méthode risque de poser des soucis de portabilité ?
A appeler uniquement lorsque l'OS est Linux, bien évidemment.
Laurent Gomila - SFML developer

Mortirey

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
    • E-mail
Re : Dessin et évenements dans 2 threads
« Réponse #4 le: Octobre 22, 2014, 04:41:28 pm »
Ok d'acord, je comprends mieux maintenant.
Merci encore.

(Et désolé, je menais mal ma recherche. Je me rends compte maintenant que la question a déjà été posée !)