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 :

utilisation des threads avec gtk en C sous linux


Sujet :

GTK+ avec C & C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par d�faut utilisation des threads avec gtk en C sous linux
    bonjour,
    j'ai voulu introduire un thread dans une application gtk , afin que celui-ci puisse �crire dans un gtkTextView
    Je n'en suis qu'� la phase de test mais �a n'a pas l'aire de fonctionner, tout se passe comme s'il n'y avait plus que le deuxi�me thread qui boucle en affichant un message dans la console.
    Il me semblait que normalement le main pouvait poursuivre son ex�cution afin d'afficher les fen�tres etc.

    Pour le thread j'utilise pthread-create(...) en invoquant la fonction cr��e auparavant.
    La compilation se passe bien.
    Sauf que , avec ou sans l'option de compilation -pthread �a se passe de la m�me mani�re.

    Je ne sais pas si je suis claire mais je peux joindre le source avec le makefile si n�cessaire.
    Merci pour votre aide.
    zerimbak

  2. #2
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par d�faut
    L'utilisation des threads avec Gtk+ est d�licate. G�n�ralement l'utilisation de la fonction g_timeout_add(); est suffisante pour les n�cessit�s du service.
    Maintenant ce qui est possible de faire et de partager une donn�e qui sera g�r�e avec les Mutex. Ainsi si la boucle Gtk+ est en train de lire/�crire cette donn�e le thread attend. Une fois lib�r�e le thread modifie la donn�e.

    Lors du traitement de cette donn�e par la boucle Gtk+ si la donn�e est bloqu�e par le thread la boucle Gtk n'attend pas et poursuit son fonctionnement jusqu'� la prochaine tentative. Cette tentative de lecture peut se faire toujours via un g_timeout_add();.

    Tout ceci �tant une id�e parmi tant d'autres...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par d�faut
    J'ai opt� pour les gthread, j'ai r�gl� le premier probl�me - A savoir mon thread est autonome, il envoie des message r�guli�rement dans la console et cela ne m'emp�che pas de faire marcher mon appli gtk.
    Mais le probl�me est lorsque je veux que mon thread �crive dans le GtkTextView, l� �a ne marche pas. Probablement un probl�me avec l'usage du param�tre gpointer dans la fonction;

    C'est ligne suivante dans ma fonction qui pose probl�me :

    pTextBuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data))
    data �tant le param�tre de ma fonction.

    Dans le main j'utilise les deux lignes suivantes pour le thread :
    g_thread_init (NULL)
    g_thread_create (f_thread, (gpointer) Entries [4], FALSE, NULL).
    Je pr�cise que Entries est un tableau qui contient des pointeurs sur des Widget et entre autre le GtkTextView.

    Les erreurs que j'obtiens sont incompr�hensibles : du style Glib-GObject-CRITICAL ....initialization assertion failed, use IA__g_type_init() prior in the function.

    zerimbak

  4. #4
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par d�faut
    Citation Envoy� par zerimbak Voir le message
    Dans le main j'utilise les deux lignes suivantes pour le thread :
    g_thread_init (NULL)
    g_thread_create (f_thread, (gpointer) Entries [4], FALSE, NULL).
    Je pr�cise que Entries est un tableau qui contient des pointeurs sur des Widget et entre autre le GtkTextView.

    Les erreurs que j'obtiens sont incompr�hensibles : du style Glib-GObject-CRITICAL ....initialization assertion failed, use IA__g_type_init() prior in the function.

    zerimbak
    On trouve dans la documentation officielle ceci :
    Please note that since version 2.24 the GObject initialization function g_type_init() initializes threads (with a NULL argument), so most applications, including those using Gtk+ will run with threads enabled. If you want a special thread implementation, make sure you call g_thread_init() before g_type_init() is called.
    Donc Il est possible que tu sois oblig� d'appel� g_type_init(); avant l'appel � g_thread_init();.
    Mais avant d'en arriver l� appelles-tu gtk_init(); avant g_thread_init();?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Tu oublies peut �tre d'appeler gtk_init (qui appelle g_type_init) avant de lancer ton thread, ce qui expliquerait le message d'erreur.
    Par contre, j'esp�re que tu as lu et que tu connais par coeur la doc concernant l'utilisation de thread avec gtk+, en particulier si tu souhaites appeler des fonctions gtk+ depuis diff�rents threads. Sinon tu vas au devant de probl�mes

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par d�faut
    En effet le gtk_init() �tait plac� apr�s l'initialisation du syst�me de threads, donc j'ai corrig� l'erreur mais j'ai maintenant un nouveau probl�me ...
    J'obtiens l'erreur suivante lors de l'ex�cution du code :

    Gtk-CRITICAL **: gtk_text_view_get_buffer: assertion `GTK_IS_TEXT_VIEW (text_view)' failed

Discussions similaires

  1. utilisation des threads avec les ejb
    Par saylar222 dans le forum Java EE
    R�ponses: 0
    Dernier message: 15/06/2012, 16h35
  2. utilisation des threads posix (sous linux)
    Par Dom_the_quaker dans le forum C++
    R�ponses: 1
    Dernier message: 27/05/2008, 11h09
  3. Utilisation des threads avec C++
    Par lolita4882 dans le forum C++
    R�ponses: 4
    Dernier message: 10/11/2007, 11h25
  4. [WD9] Probl�me avec l'utilisation des threads
    Par ramaro dans le forum WinDev
    R�ponses: 2
    Dernier message: 29/01/2007, 11h51
  5. R�ponses: 4
    Dernier message: 01/03/2006, 11h35

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