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

VB 6 et antérieur Discussion :

[VB6] timer plus rapide que 1 d'interval


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 44
    Points
    44
    Par défaut [VB6] timer plus rapide que 1 d'interval
    Salut,

    je voudrais ameliorer la fluidité de mon programme , mais il se limite au timer qui au plus vite va a 1 milliseconde d'interval.

    qq1 a-t-il une solution pour aller plus vite que le timer ?

    merci

  2. #2
    Fox
    Fox est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 52
    Points : 52
    Points
    52
    Par défaut
    Je ne crois pas que tu peux avoir plus rapide dans le style d'une Timer. Il y a l'API GetTickCount, mais elle se limite au millième de seconde aussi.

    @+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 44
    Points
    44
    Par défaut
    bon ok merci quand meme

  4. #4
    Membre du Club

    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Points : 49
    Points
    49
    Par défaut
    Si la machine le supporte, tu peux utiliser le compteur de performance. La précision peut descendre largement en-dessous du millionième de seconde.

    QueryPerformanceCounter permet de connaître la valeur actuelle du compteur, et QueryPerformanceFrequency le nombre d'itérations du compteur en une seconde (à multiplier par 10000 à cause du type Currency, utilisé ici pour les besoins de la cause -ces deux fonctions attendent des entiers non signés sur 8 octets).

    Ci-dessous un test avec un intervalle d'un dix-millième de seconde.

    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
    34
    35
    36
    Private Declare Function QueryPerformanceFrequency Lib "Kernel32" _
       (lpFrequency As Currency) As Long
     
    Private Declare Function QueryPerformanceCounter Lib "Kernel32" _
       (lpPerformanceCount As Currency) As Long
     
    Const Intervalle As Double = 0.0001 ' Intervalle, en fraction de seconde
    Const Délai As Long = 5 ' Temps total du test, en secondes
     
    Private Sub Command1_Click()
     
       Dim T1 As Currency, T2 As Currency
       Dim Pas As Currency, Freq As Currency
       Dim Chrono As Single, I As Long
     
       If QueryPerformanceFrequency(Freq) = 0 Then
          MsgBox "Compteur de performance non supporté.", vbInformation
          Exit Sub
       End If
     
       Pas = Freq * Intervalle
       Chrono = Timer
       QueryPerformanceCounter T1
     
       Do While I < Délai / Intervalle
          QueryPerformanceCounter T2
          If T2 - T1 > Pas Then
             ' Intervalle écoulée
             T1 = T2
             I = I + 1
          End If
       Loop
     
       MsgBox "Temps écoulé : " & Timer - Chrono & vbLf & vbLf & "Itérations : " & I
     
    End Sub
    Bonne chance !

  5. #5
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Pour compléter la réponse de bazoom :
    Dans le cas du timer comme de l'API GetTickCount, c'est la résolution qui est à la millisecondes. La précision est très au-dessus.
    De mémoire je crois que la précision du timer est 1/17 s et celle de GetTickCount d'environ 1/30 s.

    Seules les appels aux API montré par bazoom permettent une précision réelle.
    A lire sur le sujet
    http://haypo.developpez.com/article/frequence_cpu/

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Il parait que ce contrôle Timer modifié donne aussi une précision réelle. A vrai dire, j'ai juste vérifié qu'il fonctionnait sans pousser jusqu'au test de performance (je n'en ai pas encore eu besoin dans un programme).

    Par contre, il est aussi limité à 1ms...
    D'accord j'ai un baobab dans la main, mais j'aimerais bien que tout les assoiffés de pouvoir aient un séquaia!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 44
    Points
    44
    Par défaut
    merci a tous mais je n'arrive pas avec la solution de bazoom a faire une fonction qui se comporte comme un timer, que tout les dix-millioniemede seconde ça m'appele une sub ou que ça m'execute un code

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 44
    Points
    44
    Par défaut
    j'arrive toujourspas a faire marcher le code, en fait, il compte et apres il met le nombre d'iterations qu'il a fait moi ce que je voudrais c'est un truc qui me declenche un code a caque iteration

  9. #9
    Membre du Club

    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Points : 49
    Points
    49
    Par défaut
    Hello,

    Il faut que tu mettes le code à l'intérieur de ce bloc If/End If :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If T2 - T1 > Pas Then 
       ' TON CODE ICI...
       T1 = T2 
    End If
    La variable I ne sert à rien, je l'ai utilisée uniquement pour faire le test. La seule chose dont tu as besoin pour mettre en oeuvre cette fonction c'est de savoir que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QueryPerformanceCounter T2
    ... met dans la variable T2 la valeur actuelle du compteur de performance. Après, il faut que tu adaptes ça à tes propres besoins.

    QueryPerformanceCounter n'offre qu'une temporisation, de la même manière que GetTickCount. Ce n'est pas un Timer au sens propre du terme. Tu peux t'inspirer d'exemples basés sur GetTickCount, l'utilisation est quasiment la même.

    Une temporisation inférieure au dix millionième de seconde ça me semble excessivement court, à moins que ton code soit extrêmement rapide à l'exécution ou que ta machine soit une vraie bombe. :-)

    Bonne chance ! :-)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 44
    Points
    44
    Par défaut
    ok, merci, je vais essayer


    PS: dsl pour reponse tardive ( j'etais en vacances )

  11. #11
    Expert confirmé
    Avatar de grafikm_fr
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 470
    Points : 5 059
    Points
    5 059
    Par défaut
    Merci de mettre la tag [Résolu] la prochaine fois...
    "L'éducation, c'est le début de la richesse, et la richesse n'est pas destinée à tout le monde" (Adolphe Thiers)

  12. #12
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Citation Envoyé par Bazoom
    Si la machine le supporte, tu peux utiliser le compteur de performance.
    Pkoi "si la machine le supporte" ?
    Moi, j'aime pas facebook.

    Musiciens de France

  13. #13
    Membre du Club

    Inscrit en
    Décembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 21
    Points : 49
    Points
    49
    Par défaut
    Parce que, dixit le SDK, "The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists.... If the installed hardware supports a high-resolution performance counter, the return value is nonzero." Je n'en sais pas plus.

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

Discussions similaires

  1. [C++ CLI] Plus rapide que le TIMER
    Par abbd dans le forum C++/CLI
    Réponses: 10
    Dernier message: 27/07/2007, 15h55
  2. Access plus rapide que SQL server ????? (débutante)
    Par 24 faubourg dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/12/2005, 17h36
  3. [D7] composants plus rapides que dbExpress pour Oracle 8i
    Par Magnus dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/10/2005, 12h06
  4. Plus rapide que bresenham ?
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/06/2005, 13h28
  5. Réponses: 8
    Dernier message: 31/10/2003, 16h21

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