IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

"erreur de segmentation" due a g_thread_init()


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut "erreur de segmentation" due a g_thread_init()
    slt a tous,

    j'ai un souci avec cette fonction, je dois créer plusieurs thread en gtk mais ca plante a ce niveau, de l'aide plz.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Poste un peu de code ou détaille ( sans en faire 1000 lignes illisibles ) clairement ton probléme car avec l'information que tu nous donnes il faut être fort pour te donner la solution à ton probléme

    Mets toi à notre place quand tu postes

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    ok no souci les gars, voila le code, commenté attention !!! rien que pour vous !lol.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    int main() {
     //declarations
    ...
    //les fonctions dont la 1ere m'emet l'erreur :
      g_thread_init (NULL);
      gdk_threads_init ();   
      gdk_threads_enter ();
      gtk_init(&argc, &argv);
     
    //création d'objet widget pour la fenetre gtk
      window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
      ...
    //creation de thread 
     pthread_create( &winth,NULL, (void *)&fenetre,NULL);
     
    //creation d'un thread serveur (communication socket)
     pthread_create( &servth,NULL, (void *)&serveur,NULL);
     
     gtk_widget_show_all(window);
     gtk_main();
     gdk_threads_leave ();
    }
     
    //le code du thread (me semble-t-il)
    void fenetre()
    {
     while(1) {
     gdk_threads_enter ();
     wait(5);
     printf("fenetre\n");
     gdk_threads_leave ();
     }
    }
    je pense que vous maitrisez mieux que moi ces fonctions, mon but etant de faire tourner les 2 thread en // en partageant de la ressource entre les deux, celle ci servira a stocker les infos pour affichage dès qu'elle sera "remplie" par le serveur. merci de votre aide les amis

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Tu as passé ton programme au débugueur histoire de connaitre la cause et l'endroit du plantage ?
    Citation Envoyé par splinternabs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //les fonctions dont la 1ere m'emet l'erreur :
      g_thread_init (NULL);
      gdk_threads_init ();   
      gdk_threads_enter ();
      gtk_init(&argc, &argv);
    J'aurais commencé par initialiser les gtk puis les threads (pas l'inverse). Pourquoi utiliser les threads de gdk ? ceux de la glib ne te plaisent pas ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    j'utilise ces threads car c'es les seul qu'on ma montré. si tu propose autre chose qui marche bien je prend !!!
    je prend toute solution me permettant d'avancer mes threads.
    par contre j'ai deduit que l'erreur est au niveau de g_thread_init() car en la mettant en commentaire je n'ai pas cette erreur de segmentation.
    merci.

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par splinternabs
    par contre j'ai deduit que l'erreur est au niveau de g_thread_init() car en la mettant en commentaire je n'ai pas cette erreur de segmentation.
    Quand il est placé avant le gtk_init ?

    Voilà un squelette de code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gtk_init (&argc, &argv);
    g_thread_init (NULL);
    ...
    g_thread_create (gnr_valid, NULL, FALSE, NULL);
    ...
    gpointer gnr_valid (gpointer user_data)
    {
      ...
      g_thread_exit (0);
    }
    Je te renvoi à la doc sur les threads de la glib pour la doc de ces fonctions : http://developer.gnome.org/doc/API/2...b-Threads.html

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo