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

C Discussion :

lecture stdin non bloquante et temps de saisie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut lecture stdin non bloquante et temps de saisie
    Bonjour,
    J'aimerais savoir comment peut on effectuer une lecture non bloquante du terminal avec un temps de saisie. Autrement dit j'aimerais tester que l'utilisateur rentre bien un certain mot dans un intervalle de temps donné et ce avec un nombre d'essai que je determinerais.
    Mon problème étant que je connais la synthaxe C mais pas les fonctions/bibliothèques... Et je n'ai rien trouvé sur ce sujet, qui soit comprehensible pour moi....
    D'avance merci

  2. #2
    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 TabrisLeFol
    J'aimerais savoir comment peut on effectuer une lecture non bloquante du terminal avec un temps de saisie. Autrement dit j'aimerais tester que l'utilisateur rentre bien un certain mot dans un intervalle de temps donné et ce avec un nombre d'essai que je determinerais.
    Mon problème étant que je connais la synthaxe C mais pas les fonctions/bibliothèques... Et je n'ai rien trouvé sur ce sujet, qui soit comprehensible pour moi....
    Pas de solution standard. Le plus portable est d'utiliser les threads POSIX.1 (pthreads).

    Mais il faut avoir des notion de programmation 'concurrentielle'... Ca te parle ?

    Sinon, il y a d'autres solutions qui dépendent de ton système. Quel est-il ?

  3. #3
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Sous unix, on avait fait ce genre de démo en utilisant les signaux systèmes.

    En gros, tu utilise un handler de signaux et notament un qui verifie un signal d'alarme (de mémoire , SIG_ALRM ). Juste avant ta demande à l'utilisateur tu demande au système de te lancer un signal d'alarme dans un certain laps de temps.

    Si l'utilisateur a fait son entrée, tu demandes au système de ne plus t'envoyer de signal d'alarme.

    Mais comme l'a dit Emmanuel, ça n'est pas standard, il faut absolument faire ce genre de chose en fonction du système cible.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    En effet, j'aurais du préciser. Mon environnement en bien UNIX-like et supporte Posix. Et en effet les signaux me disent quelquechose, même si leur écriture est loin d'être un automatisme pour moi, pour l'instant.

    Pour l'instant, j'utilisais un terminal en mode brut ; lisais les caractères entrés un par un puis testais le temps, le problème restant entier puisque l'appel de la fonction getchar() est bloquante...

    J'y avais pas pensé mais si jamais j'utilise un handler de signal, le processus bloqué sera reveillé et la fonction associé au signal sera éxécuté ? Si c'est bien cela, et cela me semble logique, après réfléxion, cela résoudrait effectivement mon problème.

    Je vais de ce pas essayer.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Cela fonctionne parfaitement mais c'est loin d'être propre.
    La fonction éxécutée lors de la reception du signal, remet le comportement de reception du signal à default, affiche un message puis fait appel à exit. Ce qui est moyen mais permet de faire un time-over

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Par contre la lecture n'est toujours pas à proprement parler non bloquante...

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

Discussions similaires

  1. lecture non bloquante de clavier
    Par Bayard dans le forum Général Python
    Réponses: 4
    Dernier message: 10/08/2007, 21h27
  2. Lecture non bloquante sur plusieurs Sockets avec nio
    Par ratakses dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 19/04/2007, 16h14
  3. Lecture d'un pipe de façon non-bloquante
    Par Premium dans le forum POSIX
    Réponses: 6
    Dernier message: 31/05/2006, 09h02
  4. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 15h46
  5. Réponses: 3
    Dernier message: 16/03/2004, 16h42

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