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

Windows Discussion :

SigAlrm & Timeout sous windows


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut SigAlrm & Timeout sous windows
    Bonjour,

    Je recherche actuellement une fonction m'évitant de faire appel a l'utilisation d'un thread pour faire un simple timer sur une fonction bloquante.

    Sous linux un equivalent serait l'utilisation des signaux d'alarmes.

    J'ai besoin de cela pour arreter une fonction de reception sur socket (recv, qui est bloquante) si rien n'arrive apres X secondes.

    L'idée au final sera de placer la fonction recv dans un thread et de tuer le thread si rien n'est arrivé apres X secondes.

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    un select avec timeout, cela ne fait pas ton affaire (et en plus, cela existe sous Windows et Linux)

    http://www.linux-france.org/article/.../select-2.html
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ben déjà même sous Linux c'est select pas les signaux qu'il faut utiliser dans un cas pareil. L'équivalent du signal d'alarme sous Windows c'est peut être le message WM_TIMER. Pour créer un timer on appelle tout simplement la fonction SetTimer (KillTimer pour détruire un timer). Que veux tu faire exactement? Si tu comptes utiliser ça dans une boucle, c'est plutôt mauvais. Il y a la fonction WSAAsyncSelect qui permet d'associer un message (à définir) à chaque événement qui se produit sur un socket (arrivée de données, arrivée d'une demande de connexion (pour un socket serveur), ...).

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Attends, Melem, tu vas l'embrouiller.
    Déjà, WSAAsyncSelect() et SetTimer() ne marchent que pour des applications fenêtrées...


    Pour le problème de Bart_lx, la solution semble vraiment être select().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Je regarde du coté du select(), et j'en profite pour clarifier mon "probleme" :

    // Lancement du timer, de 2 secondes
    do {
    recv(msg); // <- fonction bloquante
    while (msg != "EVENT_END");
    // Si le timeout est atteint on se retrouve ici

    La méthode actuelle n'est pas bonne et sera changer par la suite, mais pour l'instant je dois continuer dans ce sens.

    Merci pour vos réponses

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Eh bien c'est bien select() qu'il faut employer.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Ok, je suis en train de chercher un exemple clair car j'ai un peu du mal a imprimer le fonctionnement de cette fonction.

    Merci en tout cas de ta réponse rapide.

  8. #8
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Bon et bien je n'arrive pas à trouver d'exemple utilisable d'une fonction select avec une recv à mon grand desespoir, donc je vais faire un thread et le tuer si je n'ai pas recu de message avant le timeout.

    Désolé de ne pas avoir réussi a utiliser votre solution qui, je pense, était plus adaptée.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu vas faire un truc encore pire!
    Tu perdras moins de temps à apprendre à te servir de select() qu'à faire ton truc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Regarde, cette page contient un exemple qui marche sur tout système unixoïde.
    http://man.developpez.com/man2/select.2.php

    Il suffit de remplacer le 0 (descripteur de fichier de stdin) par le numéro de ton socket, et 1 (le premier paramètre) par n°socket +1.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Piouf, merci pour ton exemple que je n'avais pas vu.

    J'ai utiliser cela, sa marche impec.
    Désolé pour mon impatience mais on est en pleine periode de test et c'était assez préssé .
    En tout cas merci bien de vos réponses rapides et tres utiles.

Discussions similaires

  1. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  2. Assembleur sous Windows et sous Linux
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 28/10/2002, 07h55
  3. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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