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

Auteur Sujet: Erreur de segmentation avec Thread.wait()  (Lu 2594 fois)

0 Membres et 2 Invités sur ce sujet

LeParp

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Erreur de segmentation avec Thread.wait()
« le: Octobre 18, 2014, 08:39:47 pm »
Bonsoir,
Je viens demander conseil à propos d'une erreur :
J'ai utilisé un système de thread pour créer un jeu ; l'affichage de ma fenêtre se fait dans un thread parallèle asynchrone. J'ai deux possibilités lorsque ma fenêtre s'ouvre : si j'appuie sur une touche, la fenêtre se ferme, tout semble se passer normalement malgré un petit lag à la fin. Cependant, si j'appuie sur une autre touche, mon jeu redémarre : la fenêtre se ferme puis se réouvre, alors que mon thread s'arrête puis redémarre : là mon programme crash.

J'ai pisté l'erreur au débugger, elle survient lors de l'appel à mThread.wait(). Si je supprime cet appel, elle semble survenir à la destruction de l'objet. Voilà ce que m'affiche Code Blocks :
Program received signal SIGSEGV, Segmentation fault.
In _pthread_cleanup_dest () ()

Je pense tenter de reproduire cet erreur avec un code minimal, je voulais cependant savoir si quelqu'un pourrait m'indiquer où chercher ou même me dire d'où peut provenir cette erreur ?
Merci, bonne soirée.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de segmentation avec Thread.wait()
« Réponse #1 le: Octobre 18, 2014, 09:04:28 pm »
Citer
Je pense tenter de reproduire cet erreur avec un code minimal
Fais donc ça. On ne va pas commencer à se remuer les méninges sans code, alors que tu t'apprêtes à en poster un complet minimal ;)
Laurent Gomila - SFML developer

LeParp

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Erreur de segmentation avec Thread.wait()
« Réponse #2 le: Octobre 18, 2014, 11:01:34 pm »
Tout d'abord, merci Laurent pour ton bon conseil de toujours chercher à obtenir un code minimal ! Ce fut beaucoup moins difficile que je ne m'y attendait de passer de 600 à 22 lignes de codes pour reproduire l'erreur, et le code que j'ai obtenu ne se devine pas...

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

void run()
{
    //sf::Clock clock2;
    sf::VideoMode video_mode2(800, 600);
}

int main()
{
    //sf::Clock clock1;
    sf::VideoMode video_mode1(800, 600);

    sf::Thread thread(&run);

    thread.launch();
    thread.wait();

    return 0;
}
 

J'ai mis en commentaire la création de clock1 et de clock2, c'est ici que ça devient intéressant. Après quelques test, en commentant alternativement clock1, clock2, video_mode1 et video_mode2, je me suis aperçu que l'erreur apparaît dans un cas très précis : lorsque dans un thread (soit le principale soit le secondaire), au moins l'un des video_mode n'est pas commenté, et que dans l'autre thread, video_mode ou clock n'est pas commenté.

N'hésitez pas à donner des réactions ou à demander plus de détails !
Je me demande si je suis le seul à trouver cette erreur totalement bizarre. ???

Note : si j’exécute le programme sans le debbuger tout semble se dérouler normalement, mais l'erreur est toujours la même avec celui-ci.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de segmentation avec Thread.wait()
« Réponse #3 le: Octobre 19, 2014, 10:33:23 am »
Quel OS ? Quelle version de SFML ?
Laurent Gomila - SFML developer

LeParp

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Erreur de segmentation avec Thread.wait()
« Réponse #4 le: Octobre 19, 2014, 07:11:25 pm »
Windows 8, SFML 2.1

Faut-il que je mette à jour SFML ? Il semble que j'ai compilé la version que j'utilise moi-même, peut être que des corrections ont été apportées depuis ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de segmentation avec Thread.wait()
« Réponse #5 le: Octobre 19, 2014, 07:35:51 pm »
J'en doute, mais tu peux toujours essayer, oui. En tout cas je ne vois pas du tout ce qui peut foirer.
Laurent Gomila - SFML developer

LeParp

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Erreur de segmentation avec Thread.wait()
« Réponse #6 le: Octobre 19, 2014, 07:54:26 pm »
Après quelques test, je me rends compte que je n'arrive pas à reproduire le crash en lançant mon programme en dehors de Code::Blocks. On peut considérer le problème comme résolu pour l'instant, si je ne donne pas de nouvelle c'est que tout vas bien. :)