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 :

Pause précise à un 100 eme de seconde sous dos


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Par défaut Pause précise à un 100 eme de seconde sous dos
    Salut à tous


    Comment obtenir des poses de l'ordre du 100 eme de milli seconde ( 0.01 ms ) en Turbo C sous Dos avec un résultat constant quelque soit la puissance du PC utilisé ?

    La commande delai(1) permet d'avoir une delai de 1 milliseconde . Impossible de dessendre en dessous via cette commande

    La boucle for(i=1;i<10000;i++) permet une pause plus courte et tres fine mais offre un resultat totalement variable et depedant de la puissance du PC utilisé ...



    Arnaud

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    La fonction select() devrait permettre de faire ce que tu veux.

    Ceci dit, je ne suis pas certain que tu puisses atteindre une telle précision avec exactitude.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1
    Par défaut
    utilises sleep();

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    La boucle for(i=1;i<10000;i++) permet une pause plus courte et tres fine mais offre un resultat totalement variable et depedant de la puissance du PC utilisé ...
    ca a un autre inconvénient est que ton programme travaille en fait ca utilise de la cpu pour effectuer tes incrementations ( regarde la charge de cpu qui augmente )

    avec un sleep ca te permet de faire ta tempo et de ne pas utiliser de cpu.

  5. #5
    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: Pause précise à un 100 eme de seconde sous dos
    Citation Envoyé par CLERGET
    Comment obtenir des pauses de l'ordre du 100 eme de milli seconde ( 0.01 ms ) en Turbo C sous Dos avec un résultat constant quelque soit la puissance du PC utilisé ?
    Impossible. Un PC n'est pas une base de temps. Le tic interne est d'environ 55 ms (18.2 tics / secondes).

    C'est le résultat de 65536 / 3600 = 18.204444 tics par secondes, soit 54,931640625 ms.

    Toucher à ça risque de destabiliser le PC.

    Tu peux utiliser des des boucles calibrées, mais avec les caches instructions, aucune garantie sur le temps d'exécution...

    Il faut un timer matériel autonome, et encore.... (voir les ressources matérielles non utilisées du PC.)

    Tu ne devrais pas avoir besoin d'une telle précision dans du logiciel. AMA, la conception est à revoir... Que veux tu faire exactement.

  6. #6
    Membre confirmé Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Par défaut
    entierement d'accord avec emmanuel. Seule une it timer peut te "garantir un temps" et encore cela depend de son niveau de priorité.
    Regarde les reponse donnée sur ce forum à timer en milliseconde de SL1200MK2

  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 Nightmare
    utilises sleep();
    Sous DOS ?

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Nightmare
    utilises sleep();
    Sous DOS ?
    y'a un équivalent ?

  9. #9
    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 hegros
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Nightmare
    utilises sleep();
    Sous DOS ?
    y'a un équivalent ?
    DOS/Borland C : delay() résolution égale au tic horloge (55 ms environ)
    Windows : Sleep() résolution théorique de 1 ms, mais je demande à voir...

  10. #10
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    parce que ce que je comprends sur un sleep de 1ms c'est que cela met ton process dans un état inactif ( endormi) pendant 1 ms ou du moins il devient illégible par l'ordonnanceur 1 ms aprés l'execution de l'instruction ( je suppose pareil pour la fonction delay )

    mais cela ne voudrait donc pas dire que l'execution de ton programme reprendrait aprés 1 ms, il faudrait encore qu'il soit reellement 'élu'( avec tout le mécanisme que cela peut entrainer aprés l'election->chargement des contextes pour en citer un )

    l'instruction suivant le sleep serait donc executé au moins a l'instant 1ms(sleep) + temps d'election

  11. #11
    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 hegros
    parce que ce que je comprends sur un sleep de 1ms c'est
    Tu veux dire Sleep() ?
    • delay() : DOS/Borland : résolution 55ms
    • Sleep() : Windows : résolution 1ms
    • sleep() : unixoide : résolution 1seconde
    • usleep() : unixoide : résolution 1 µseconde (Arf!)

    que cela met ton process dans un état inactif ( endormi) pendant 1 ms ou du moins il devient illégible par l'ordonnanceur 1 ms aprés l'execution de l'instruction ( je suppose pareil pour la fonction delay )
    Sleep() étant Windows/Multiprocessus coopératif (ou préemptif selon les versions), il est censé faire ça. delay(), qui est DOS/Monoprocessus, fait une attente active (pas coopérative du tout!).
    mais cela ne voudrait donc pas dire que l'execution de ton programme reprendrait aprés 1 ms, il faudrait encore qu'il soit reellement 'élu'( avec tout le mécanisme que cela peut entrainer aprés l'election->chargement des contextes pour en citer un )

    l'instruction suivant le sleep serait donc executé au moins a l'instant 1ms(sleep) + temps d'election
    Comme on est sur des systèmes sans contraintes 'temps réel', oui. Quand on fait un Sleep(1) sous Windows, on demande "au moins" une milliseconde de suspension. Elle peut en faire 10 ou 100 (ou 100000000...) sans qu'on puisse râler... Par contre, elle ne faire moins de 1 ms.

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp
    Parameters

    dwMilliseconds
    [in] Minimum time interval for which execution is to be suspended, in milliseconds.

  12. #12
    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
    Sous windows, il me semble que la granularité est de l'ordre de 15-16 ms.
    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. Diminution des images par secondes sous mozilla ou IE
    Par Kalmane dans le forum Intégration
    Réponses: 1
    Dernier message: 09/04/2008, 17h25
  2. comment faire une pause précise (1/10000 s)
    Par Batoche dans le forum C++
    Réponses: 12
    Dernier message: 13/05/2007, 19h33
  3. [QBasic] Se ferme après 10 secondes sous Win XP SP2
    Par _SamSoft_ dans le forum Basic
    Réponses: 6
    Dernier message: 10/04/2007, 21h33
  4. Réponses: 9
    Dernier message: 23/09/2006, 17h13
  5. Forcer date, heure et seconde sous sql server2000
    Par sorel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 18h49

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