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 :

[DOS] Fonction sleep (précision à la milliseconde)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut [DOS] Fonction sleep (précision à la milliseconde)
    Bonjour à tous.

    Dans le but de créer un jeu de réflexes, je cherche la fonction équivalente à Sleep() ou usleep() (respectivement en programmation Windows et Un*x), mais en DOS.

    Quelqu'un a ça sous le coude ? Parce que google me renvoie sur une myriade de fonctions dont la plupart sont Sleep(), usleep(), ou alors des commandes pour batch, et pas de fonction C/C++ qui fait une pause de X millisecondes.

    J'ai pas besoin d'une résolution temps réel non plus, mais si ça pouvait être précis à quelques ms ça serait pas mal, vu que le score est basé sur le temps de réaction, et qu'il est de l'ordre de 100ms pour les meilleurs.

    Pour info, le principe, c'est 5 runs où l'on voit affiché "Ready...", puis "Set...", puis un temps aléatoire compris entre 0 et 10s (oui oui, ça peut partir instantanément), puis "Go!". On calcule les 5 temps de réaction, et on les additionne. Le score (qui doit être le plus bas possible) est cette somme.
    Sur le jeu sur lequel j'ai pris exemple, il y a également un compteur de parties, et un compteur de parties dont le score est inférieur à 600. Pour plus de 1600 parties, il y a 5 scores plus bas que 600. Ça veut donc dire qu'il y a des fous qui ont un temps de réaction moyen inférieur à 120ms...

    PS : J'ai essayé _sleep(), mais il n'a pas l'air d'être dans dos.h non plus.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Par défaut
    "Des commandes pour batch"

    Ben t'as qu'a faire un system("macommadebatch") non ?

  3. #3
    Membre éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut
    Tant que je peux éviter system, j'évite system

    Mais en fait, je me suis rendu compte que ça n'allait pas pour faire ce que je veux. Du coup j'ai fais un timeConsumingSleep()

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <sys/time.h>
     
    void timeConsumingSleep(int msTime)
    {
        timeval *startTime = (timeval *)malloc(sizeof(struct timeval));
        timeval *curTime = (timeval *)malloc(sizeof (struct timeval));
     
        long long startTimeAsLong = 0L;
        long long curTimeAsLong = 0L;
        long long endTimeAsLong = 0L;
     
        if (startTime == NULL || curTime == NULL)
        {
            cerr << "Error creating time structure" << endl;
            exit(EXIT_FAILURE);
        }
     
        gettimeofday(startTime, NULL);
        startTimeAsLong = 1000L * startTime->tv_sec + startTime->tv_usec / 1000L;
        endTimeAsLong = startTimeAsLong + (long)msTime;
        curTimeAsLong = startTimeAsLong;
     
        while(curTimeAsLong < endTimeAsLong)
        {
            gettimeofday(curTime, NULL);
            curTimeAsLong = 1000L * curTime->tv_sec + curTime->tv_usec / 1000L;
        }
     
        free(startTime);
        free(curTime);
        startTime = NULL;
        curTime = NULL;
    }
    EDIT : Compilé avec gcc et gpp de djgpp

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Parles-tu ici du vrai DOS, en 16 bits et tout?

    Ou bien simplement d'une application console sous un OS 32 bits normal? (*n*x, Win32)
    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 éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut
    Du vrai DOS en 16 bits et tout

    Si c'était une application console, j'aurais utilisé sleep ou Sleep (de unistd.h ou de windows.h)

    Le but est de faire fonctionner l'appli sous FreeDOS ou DOS 6.22.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je me souviens que la bibliothèque de Borland C(++) exportait une fonction delay()...
    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.

Discussions similaires

  1. [Dates] Fonction sleep
    Par nebule dans le forum Langage
    Réponses: 7
    Dernier message: 15/11/2005, 15h39
  2. cherche alternative à la fonction Sleep()
    Par anthracite dans le forum C++
    Réponses: 7
    Dernier message: 26/10/2005, 16h07
  3. Fonction Sleep presice à 100 Microsecondes
    Par bob8181_2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/09/2005, 22h20
  4. [VB.NET] Fonction sleep
    Par Dnx dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/02/2005, 15h31
  5. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 19h46

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