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

MFC Discussion :

Timer


Sujet :

MFC

  1. #1
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut Timer
    Bonjour,

    Je voudrais que mon application lance une proc�dure toutes les 100ms pr�cise.
    J'ai mis ce code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    timeSetEvent(100,0,CallBackTimer,0,TIME_PERIODIC);
    Dans la proc�dure CallBackTimer, j'enregistre des donn�es r�cup�rer en m�moire vers un fichier. La premi�re fonction de ma proc�dure CallBackTimer est :Et J'enregistre dans le fichier Heure, et je m'aper�ois que le temps entre les diff�rentes donn�es Heure enregistr�es n'est pas 100ms, mais un coup 93ms, un autre coup 110ms.....etc....
    Ce n'est donc pas tr�s r�gulier.

    Comment peut-on faire pour appeler une proc�dure toutes les 100ms r�elles ?

    Merci d'avance
    Fred

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    pour �tre homog�ne, il vaudrait mieux appeler timeGetTime ou timeGetSystemTime pour v�rifier la pr�cision du timer.

    Windows sous toutes ses formes n'est pas un OS temps r�el.
    En gros, le scheduler accodre des tranches de temps � chauqe tache et lorsqu'une tranche de temps est �puis�e ou que le process/thread passe en "attente", il fait un changement de tache et � ce moment regarde les s�maphores, mutex et timer et autres pour voir sii quelqu'un a besoin d'�tre r�veill�. Comme en plus ca tient compte des priorit�s relatives des t�ches, il y a une certaine fluctuation....

    Il me semble qu'il y a des solutions qui trainent dans la nature

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut
    Je me trompe peut-�tre (surement m�me ), mais est-ce que augmenter la priorit� du thread n'augmenterait pas la pr�cision ?

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    A priori, oui, mais de toute facon, la latence de Wxx est assez grande. En plus les choix de priorit� sont assez restreints, avec HIGH_PRIORITY_CLASS, on arrive � la priorit� du task manager, avec REALTIME_PRIORITY_CLASS, on prend vraiment des risques....

  5. #5
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    Bonjour,

    Merci pour vos aides.
    Encore 1 question :
    Comment fait-on pour obtenir des hh:mm:ss:ms d'apr�s ce que retourne timeGetTime() ?

    Merci
    Fred

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    salut, le plus simple est d'utiliser GetSystemTime pour avoir une structure

  7. #7
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    oui, mais ce n'est pas pr�cis pour ce que je cherche.

  8. #8
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    la seule facon de l'utiliser est de faire une diff�rence avec un autre appel de timeGetTime()
    si tu cherches encore plus de pr�cisions, tu peux te tourner vers QueryPerformanceCounter et QueryPerformanceFrequency

  9. #9
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    Est-il possible d'ajouter le r�sultat de timeGetTime() dans GetSystemTime() ?

    Cad, je d�clare au d�part une variable long iStartTime = GetSystemTime, qui va me donner l'heure de d�part, et ensuite je peux incr�menter cette variable avec le contenu de timeGetTime() pour avoir les hh:mm:ss:ms avec la pr�cision de timeGetTime().
    Est-ce que c'est possible ?
    Si oui, comment puis-je faire STP (car je d�bute avec Visual C++, donc tout est nouveau pour moi) ?

    Merci

  10. #10
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    tu veux calculer le nombre de ms, sec, etc ... entre deux appels ? c'est ca ?

    faudrait faire un truc du genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	DWORD start = timeGetTime();
     
    // ... truc à mesurer ...
     
    	DWORD end = timeGetTime();
     
    	int ms = (end-start) % 1000;
    	int ss = ((end-start) -  (end-start) % 1000)/1000;
    	// etc ...

  11. #11
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    sauf qu'il faudrait revoir mes formules math�matiques ... ca commence � dater

  12. #12
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    je me suis d�brouill�e.
    En fait je d�compose mes varaibles (heure, ms,s...) de GetSystemTime(), et j'inc�mente les ms avec le r�sultat de timeGetTime(), et apr�s je fais mes analyses sur ms, si ms > 1000 alors j'incr�mente les secondes, et ainsi de suite......
    Ce n'est peut-�tre pas une tr�s bonne programmation, mais ca marche tr�s bien.

    Merci pour ton aide
    Fred

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    R�ponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caract�re / timer
    Par JeanJean dans le forum C
    R�ponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [R�seau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de pr�cision
    Par guigui dans le forum MFC
    R�ponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en �secondes
    Par Dagobert dans le forum x86 16-bits
    R�ponses: 3
    Dernier message: 25/11/2002, 00h59

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