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 :

Glib IoChannel timeout


Sujet :

GTK+ avec C & C++

  1. #1
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par d�faut Glib IoChannel timeout
    Bonjour,

    J'utilise des IOChannel pour une connexion par socket entre deux programmes. La connexion marche bien, j'envoie et je re�ois.

    J'ai un besoin maintenant de timeout, � savoir:
    A envoie un message � B,
    et attends la r�ponse de B ou jusqu'� ce que le timeout soit pass�.

    Comme il n'y a pas de timeout dans le read des iochannel (enfin je crois pas), au d�part je comptais, dans A:
    1/ Me connecter au signal_io
    2/ Ecrire � B dans le channel
    3/ Me mettre en attente active tant que le bool�en RECEIVED soit faux
    ou que mon timer.elapsed() soit < � TIMEOUT (variable)
    => dans cette attente active, dormir un poil de centi�me de seconde, d�piler les signaux Glib avec MainContext::Iteration

    et dans la callback du signal_io, mettre RECEIVED � vrai d�s que je re�ois le message.

    Le probl�me, c'est que je ne re�ois rien dans ce cas, il semble que mon d�pilage d'iteration ne fonctionne pas...

    y a-t-il une solution plus simple, ou un correctif � mon id�e ?

    Merci

  2. #2
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    Bonjour,

    tu peux utiliser g_io_add_watch pour ajouter ta source d'�v�nements � la boucle principale. Voici une m�thode pour r�soudre ton probl�me:

    Quand A envoie son message, tu amorces une source d'�v�nement timeout avec ton temps maximum autoris� pour la r�ponse gr�ce � g_timeout_add. Cette fonction retourne un identifiant de source d'�v�nements.

    Quand ta callback de r�ception de donn�es est appel�e, et que tes donn�es ont bien �t� re�ues, tu supprimes la source timeout avec g_source_remove.

    Bien s�r, pense � g�rer une file d'attente de message � envoyer pour �viter l'entrelacement de messages (deuxi�me message envoy�s par A alors qu'on est encore en attente de la r�ponse de B).

  3. #3
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par d�faut
    hm, merci pour cette r�ponse, la solution est jolie

    Je vais aller voir du cot� de ce io_add_watch

    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [TOMCAT] Probl�me de timeout d'une servlet
    Par tuxor dans le forum Tomcat et TomEE
    R�ponses: 5
    Dernier message: 18/09/2007, 12h04
  2. Alter Session : question de TimeOut
    Par Filippo dans le forum Administration
    R�ponses: 4
    Dernier message: 13/05/2004, 17h42
  3. [JSP]recuperer session-timeout dans web.xml
    Par seb_fou dans le forum Servlets/JSP
    R�ponses: 2
    Dernier message: 07/05/2004, 16h01
  4. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum D�veloppement
    R�ponses: 2
    Dernier message: 30/12/2003, 17h22
  5. Ftp login & Timeout
    Par MSP dans le forum Modules
    R�ponses: 6
    Dernier message: 29/08/2003, 12h55

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