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 de select()


Sujet :

GTK+ avec C & C++

  1. #1
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut Utilisation de select()
    Bonjour a vous,
    pour un programme de type chat client + serveur, je souhaite faire une interface GTK, jusque la aucun souci.

    Seulement pour ecouter les donnes du serveur envoyees sur la socket, j'utilise la fonction select() permettant de surveiller la socket. La fonction select() est utilisee dans une boucle infinie.

    Or en GTK on doit faire appel a la fonction gtk_main(), qui elle aussi est une fonction infinie ... Comment faire donc pour combiner les deux ?

    Actuellement le code ressemble a cette structure en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(int ac, char **av)
    {
       // Creation de l'interface GTK, avec un gtk_main() a la fin, qui est une boucle infinie
       interface();
     
       while (1)
       {
          // Ecout de la socket
          select();
     
          // Afficher le messae dans l'interface GTK si un message a ete envoye sur la socket
       }
    }
    Le programme bloque bien entendu au niveau de l'interface a cause du gtk_main(). Ce probleme est probablement classique mais aucun moye nde trouver une solution :/

    merci d'avance pour votre aide.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Tu pourrais mettre un timer qui vérifierait les sockets tous les n secondes...

    Jc

  3. #3
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Et le gtk_main() ou doit il etre place dans ce cas ?
    Merci, @+
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par genova
    Et le gtk_main() ou doit il etre place dans ce cas ?
    Merci, @+
    Je ne connais très peu gtk mais à mon avis tu ferais ceci:

    Tu initialises ton programme
    Tu mets en place un timer gtk
    Tu lances gtk_main


    Lorsque ton timer est fini, un appel vers une fonction sera faite (la fonction est défini lorsque tu as mis en place le timer gtk) et tu peux faire ton select

    Enstuite tu remets un timer pour un appel ultérieur...

    Utilises je suis sûr qu'il y a des exemples...

    Jc

  5. #5
    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
    g_idle_add devrait faire l'affaire

  6. #6
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Merci beaucoup pour votre aide, j'ai pu gerer le souci a l'aide d'un gtk_timeout_add().

    Merci encore
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par genova
    Merci beaucoup pour votre aide, j'ai pu gerer le souci a l'aide d'un gtk_timeout_add().

    Merci encore
    Effectivement, c'est une solution, mais comme l'a dit gege2061, l'utilisation de g_idle_add serait sûrement plus judicieux. Finalement, en utilisant cette fonction tu dis:

    S'il n'y a plus rien à faire, regarde le select. C'est une façon propre pour résoudre le problème et tu auras sûrement des vérifications plus fréquentes qu'avec le timer, mais de nouveau, je ne suis pas spécialiste gtk (même pas débutant en fait ).

    Autre remarque, rend ton select non bloquant pour ne pas déranger gtk.

    Jc

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tu pourrais aussi utiliser du multithreading.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de Select [Win/Linux]
    Par granquet dans le forum Réseau
    Réponses: 6
    Dernier message: 28/01/2010, 10h04
  2. Réponses: 6
    Dernier message: 26/02/2008, 11h58
  3. Utilisation de select (multiplexage de socket)
    Par caesarvanou dans le forum C++
    Réponses: 5
    Dernier message: 12/07/2006, 15h45
  4. utilisation de select() pour faire un Tchat
    Par innosang dans le forum Réseau
    Réponses: 30
    Dernier message: 09/11/2005, 16h15
  5. [Hibernate] Utilisation de select new
    Par speedster dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/09/2005, 16h41

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