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 :

Problème minuterie vs. scanf


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut Problème minuterie vs. scanf
    Bonjour,

    Je suis en train de réaliser un petit jeu en C et en fait, j'aurais une question à vous poser car je bloque un petit peu...

    Voici le "problème" que je rencontre dans le jeu semblable à "othello"...

    Chacun des deux joueurs, qui jouent à tour de rôle, doit entrer les coordonnées de la case sur laquelle ils veulent se déplacer. De plus, le temps est limité pour chaque joueur (1 min). Mon problème, c'est que le scanf est une fonction bloquante et donc le fait d'insérer une minuterie est inutile puisque le programme restera bloqué sur le scanf.

    Comment puis-je donc faire pour faire un timer qui ne bloque pas sur l'attente du scanf?

    J'ai pensé aux threads mais bon, je ne sais pas trop si le C standard offre cette possibilité...
    J'ai pensé faire une boucle qui serait la base de mon timer mais je ne sais pas si le C offre une fonction qui lit ce qu'on entre en entrée standard sans attendre qu'on appuie sur une touche du clavier...(il existe la fonction kbhit() mais c'est pas la plus pratique... :os
    J'ai pensé aux signaux SIGALRM mais bon, mon logiciel de prog n'offre pas cette fonctionnalité et en plus, je ne suis pas sous unix

    Auriez-vous une idée de comment faire?? Je programme avec turboC sous OS Windows.

    Merci d'avance.

  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 Re: Problème minuterie vs. scanf
    Citation Envoyé par lhulard
    Comment puis-je donc faire pour faire un timer qui ne bloque pas sur l'attente du scanf?

    J'ai pensé faire une boucle qui serait la base de mon timer mais je ne sais pas si le C offre une fonction qui lit ce qu'on entre en entrée standard sans attendre qu'on appuie sur une touche du clavier...(il existe la fonction kbhit() mais c'est pas la plus pratique...

    Auriez-vous une idée de comment faire?? Je programme avec turboC sous OS Windows.
    Problème récurrent. Les fonctions d'entrée standard du C sont blocantes, il n'y a donc pas de solution standard. Puis que tu es sous Turbo C (DOS 16-bit mode réel), la seule option que je vois est la boucle de polling avec gestion de l'écheance (time()) et surveillance du clavier (kbhit() + (getch()). L'application va bouffer 100% du CPU à ne rien faire... Heureusement, Windows est préemptif...

    Autre solution, passer en 32-bit (mingw, code::blocks) et utiliser les threads, Sleep() etc. Là, on redevient civilisé. (et il existe un portage de conio si tu en as besoin pour l'affichage en mode console)

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

Discussions similaires

  1. Problème getchar et scanf
    Par rexavier dans le forum Débuter
    Réponses: 1
    Dernier message: 01/05/2013, 16h07
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. problème avec scanf
    Par thierry_b dans le forum C
    Réponses: 10
    Dernier message: 21/12/2005, 20h10
  4. problème avec scanf
    Par troumad dans le forum C
    Réponses: 30
    Dernier message: 20/11/2005, 15h21
  5. un problème tout bête de scanf !
    Par eizo dans le forum C
    Réponses: 9
    Dernier message: 31/10/2005, 12h29

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