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

Réseau C Discussion :

[timer & thread] timeout & socket non bloquant


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Par défaut [timer & thread] timeout & socket non bloquant
    bonjour
    Un thread lance un timer (qui fonctionne bien). Comment faire simplement opur que la thread soit informé du timeout de ce timer . J'ai pensé à la création d'une pipe entre le deux mais y a t'il plus simple? Petre avec la gestion des signaux (unix)?
    merci

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Mets un bout de code au moins s'il te plait car on sait même pas de quelle thread tu parles (main ou fille).
    Cordialement.

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

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Par défaut
    Voici le programme de la thread. a un moment donné elle lance le timer. Mais comment lui dire que letimeout est franchi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Thread  {
    ...
    startimer();
    ...
     
    }
    le prog timer:
    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
    void action() {...}
     
    void starttimer() {
    #ifdef BSD
    signal(SIGALRM, action);
    #else
    struct sigaction act;
    act.sa_handler = action;
    act.sa_flags = SA_RESTART;
    if(sigaction(SIGALRM, &act, NULL) == -1) {
        fprintf(stderr, "error %d in sigaction\n");
    }
    #endif                                                               
    tempo.it_interval.tv_sec = INTERVAL_SEC;                                        
    tempo.it_interval.tv_usec = INTERVAL_MICROSEC;                                  
    tempo.it_value.tv_sec = INTERVAL_SEC;                                           
    tempo.it_value.tv_usec = INTERVAL_MICROSEC;                                     
    setitimer(ITIMER_REAL, &tempo, 0);     
    }

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par untipy
    Voici le programme de la thread. a un moment donné elle lance le timer. Mais comment lui dire que letimeout est franchi
    <...>
    En général, on utilise select() pour bloquer la boucle du thread. On peut régler un timeout.

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

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Par défaut
    ok, mais j'aimerai ne pas bloqué le thread, car le timer peux etre long, et la thread doit faire autre chose a coté.
    en fait je voudrais gérer çà comme une interruption et la ... ail ....!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Par défaut
    dans la fonction action() peux t'on ajouté un lien vers la thread pour lui dire 'timer fini'??

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par untipy
    ok, mais j'aimerai ne pas bloqué le thread, car le timer peux etre long, et la thread doit faire autre chose a coté.
    en fait je voudrais gérer çà comme une interruption et la ... ail ....!!
    En principe, un thread est bloqué et ne se débloque que sur évènements. Avec select(), les évènements sont (pour simplifier) :

    - échéance du timer()
    - réception sur flux entrant (y compris sockets)
    - émission sur flux sortant (idem)

    Une interruption et un thread sont deux concepts différents. Tu peux néanmoins débloquer un thread cycliquement si tu veux faire une sorte de polling en réglant le timeout de select() sur une valeur courte (tick)... Tu peux alors gérer un timeout long en comptant les ticks... Tout dépend de l'application.

    Nota : un thread qui tourne en permanence (boucle 'blanche') est considéré comme 'asocial"'. Il doit y avoir au moins une suspension (sleep(1)) dans la boucle pour laisser le système respirer, surtout si il est de type 'coopératif' (Linux, par exemple).

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

Discussions similaires

  1. Socket non bloquant
    Par Shredder dans le forum Web & réseau
    Réponses: 1
    Dernier message: 29/10/2007, 11h44
  2. socket non bloquant
    Par Mister_Don dans le forum C++
    Réponses: 18
    Dernier message: 17/08/2007, 17h57
  3. [Réseau] socket non bloquant
    Par beLz dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2007, 15h20
  4. Réponses: 3
    Dernier message: 20/10/2006, 19h50
  5. socket non bloquante
    Par jeje99 dans le forum Réseau
    Réponses: 15
    Dernier message: 21/02/2006, 08h52

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