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 :

[Timer] Comment générer des évenements réguliers et PRECIS?


Sujet :

Windows

  1. #1
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut [Timer] Comment générer des évenements réguliers et PRECIS?
    Bonjour à tous,
    Je suis en train de développer un petit métronome. Il faut donc que j'arrive à générer un son toutes les X millisecondes (selon le tempo choisi) et ceci de façon précise, pas question d'avoir un décallage (perceptible par l'être humain en tout cas).
    J'utilise actuellement un timer pour générer un évenement et l'API PlaySound pour jouer mon son.
    J'ai mappé mon fichier de son en mémoire afin qu'il ne doive pas être lu sur le disque dur à chaque lecture (Bien qu'a mon avis, Windows agisse déja comme celà sans que je le fasse explicitement)
    J'ai essayé d'utiliser une tmrProc plutot que le message WM_TIMER.
    J'ai testé différents mode de lecture de l'API PlaySound (sync et async) mais rien n'y fait.
    Le problème survient lorsque le processeur est sollicité, comme par exemple lorsque je reduis/agrandi une fenetre. A fréquence élevée, le son est "coupé" pendant quelques 10eme de seconde.

    - Y aurait-il un meilleur moyen que d'utiliser un timer pour générer des evenements à intervalles réguliers et précis?
    - Faudrait-il jouer avec les priorités, créer un thread pour la lecture du son,...?

    Merci d'avance,
    Crisanar

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 89
    Points
    89
    Par défaut
    La réponse est simple :
    Le Timer de l'API n'est pas un Timer précis. Il est limité à une fréquence minimale de 10 Hz ... tu ne peux pas aller en dessous. D'où ton décalage.
    En plus de ça, appeller la fonction playSound de l'API toutes les 10eme de secondes doit nécessiter quelques dixièmes ou centièmes de secondes aussi..
    Si tu veux gérer des évènement à des intervalles précis n'utilise pas le Timer de Windows ... essaye voir des fonctions de la SDL par exemple
    @+

  3. #3
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Salut djflex68,
    J'ai entre-temps continué à chercher et j'ai lu pas mal d'infos sur les timers.
    Effectivement WM_TIMER n'est pas du tout la bonne méthode lorsqu'on désire un timer précis et fiable (il a une précision à la milliseconde mais n'est fiable que de 20ms)
    Sinon le timer créé avec timeSetEvent est plus fiable mais consomme beaucoup de ressource.
    Le meilleur timer serait celui créé avec CreateTimerQueueTimer, mais il n'est pas compatible avec les versions < à win2000.
    Sinon j'ai vu des solutions en mettant la plus haute priorité au process, ainsi qu'au thread mais je ne pense pas que ca soit la solution la plus élégante.
    Bref, je n'ai rien trouvé de réellement satisfaisant mais je me contenterai de ça.
    Merci à tous.

    Un petit lien qui résume le tout : http://www.codeproject.com/system/timers_intro.asp

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

Discussions similaires

  1. Comment générer des sources?
    Par Onarap dans le forum Maven
    Réponses: 2
    Dernier message: 11/01/2007, 11h09
  2. Réponses: 2
    Dernier message: 16/05/2006, 18h02
  3. Comment générer des interfaces garphiques à partir de XML
    Par @yoyo dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 31/03/2006, 11h40
  4. Réponses: 9
    Dernier message: 14/12/2005, 19h44
  5. Comment générer des pages HTML dynamiques ?
    Par Devil666 dans le forum Java EE
    Réponses: 2
    Dernier message: 15/04/2005, 11h56

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