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 :

timeSetEvent fonctionne pas :D


Sujet :

Windows

  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut timeSetEvent fonctionne pas :D
    J'essaye d'avoir un tic régulier de 41ms secondes et j'obtiens 100 ms.
    Pourquoi ?

    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
      m_fps = 24;
    
      TIMECAPS tc;
      UINT resolution;
    
      if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) 
          return;
    
      resolution = min(max(tc.wPeriodMin, 1000/m_fps), tc.wPeriodMax);
      // resolution est bien egal a 41
    
      uint err = timeBeginPeriod(resolution); 
      // pas d'erreur
    
      m_loop_timer = timeSetEvent( 10, resolution, tic, (DWORD)(this), TIME_PERIODIC );
      // handle ok
    
      if(!m_loop_timer)
        return;

  2. #2
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Tout d'abord, je tiens à préciser que je n'ai jamais utilisé ces fonctions, donc ce que je vais dire sera peut-être stupide, ou faux, voire les deux.
    Si j'ai bien compris, la ligne:
    permet de déterminer si 41 ms est une valeur acceptable pour le timer, n'est-ce pas?
    Je ne saisis pas votre appel de timeSetEvent(). Si vous désirez un intervalle de 41 ms, pourquoi fixez-vous le premier paramètre à 10? Ensuite, j'aurais plutôt reglé le second paramètre à 0 (précision maximale) ou un peu plus (moins de précision). Je ne saisis pas pourquoi vous le réglez à 41. Au final, j'aurais plutôt écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    err = timeBeginPeriod(tc.wPeriodMin); 
    m_loop_timer = timeSetEvent( 41, 0, tic, (DWORD)(this), TIME_PERIODIC );

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    exact c'etait bien ça...

    mais c'est fou regarde les examples msdn, les parties en rouges qui m'ont induites en erreur :

    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
    #define TARGET_RESOLUTION 1         // 1-millisecond target resolution
    
    TIMECAPS tc;
    UINT     wTimerRes;
    
    if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) 
    {
        // Error; application can't continue.
    }
    
    wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
    timeBeginPeriod(wTimerRes); 
    
    UINT SetTimerCallback(NPSEQ npSeq,  // sequencer data
        UINT msInterval)                // event interval
    { 
        npSeq->wTimerID = timeSetEvent(
            msInterval,                    // delay
            wTimerRes,                     // resolution (global variable)
            OneShotCallback,               // callback function
            (DWORD)npSeq,                  // user data
            TIME_ONESHOT );                // single timer event
        if(! npSeq->wTimerID)
            return ERR_TIMER;
        else
            return ERR_NOERROR;
    }
    j'interpretais le "delay" comme le temps entre l'appel de la fonction et le déclenchement du premier tic...

    merci en tout cas

  4. #4
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    En effet, ce n'est pas très clair. Quand j'ai besoin d'aide sur l'API Windows, j'utilise les fichiers d'aide Borland téléchargeables sur leur site.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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