Comment créer un timer de moins d'une milliseconde?

matthias66 Messages postés 2 Date d'inscription mercredi 13 octobre 2010 Statut Membre Dernière intervention 18 octobre 2010 - 13 oct. 2010 à 11:09
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 - 18 oct. 2010 à 19:30
Bonjours à tous,

Voici mon problème : je dois créer un programme en VB.net qui implique l'acquisition de positions, Sachant que le mouvement dure environ 1 ms et qu'il faut que je mesure des positions intermédiaires. Comment puis-je faire pour régler un timer dont l'intervalle entre 2 boucle sera plus court qu'une ms ?

J'ai lu qu'il était possible d'utiliser des API Windows pour améliorer la précision du timer, peut-on les utiliser pour diminuer l'intervalle entre 2 boucles ? Comment peut-on utiliser ces fonctions?

Je sais qu'il m'est possible de le faire, car j'utilise une carte d'acquisition et j'ai réussi à obtenir des positions intermédiaires grâce à LabView Express. Serait-il possible de lancer l'acquisition de données par Labview en utilisant VB.Net ?


Merci beaucoup de votre aide, je suis prenneur de toute les pistes!

5 réponses

NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
13 oct. 2010 à 12:40
Bonjour,

Avec .NET, tu n'ira pas très vite, si tu veux vraiment de la précision, je te conseil plutôt d'aller plus près de la machine, C/C++.
Car un fait simple, le temps de changement entre 2 passage sur le même programme (ben oui, multitâche), est d'environ 15 à 31ms.
Je ne sais pas comment LabViewExpress, mais je ne pense pas que ça tourne sous .NET.

Peut être que d'autres répondront, mais d'après ce que je connais, VB.NET n'est pas le plus conseillé pour cela.

Mon site
cs_Baboon2000 Messages postés 4 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 14 octobre 2010
14 oct. 2010 à 22:28
Pour faire simple et court, il est possible d'utiliser la fonction de l'API GetTickCount qui, si je me souviens bien car je l'ai utilisé il y a bien longtemps, peut te donner des intervalles de qques microsecondes. Par contre cette fonction monopolise ta tâche, donc il reste toujours cette possibilité que je ne maitrise pas et que l'ont appelle le multi-thread je crois.

Bonne soirée.
Baboon
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
15 oct. 2010 à 17:39
Bonjour,

Baboon2000,

GetTickCount (en .NET Environment.TickCount) retourne la durée depuis le démarrage de l'ordinateur en millisecondes.

Mais ce qui est le plus bloquant c'est que entre 2 passage sur un même processus (multitache), la durée de pause du programme peut prendre 15 et 32ms.

Mon site
matthias66 Messages postés 2 Date d'inscription mercredi 13 octobre 2010 Statut Membre Dernière intervention 18 octobre 2010
18 oct. 2010 à 17:50
Bonjour

Merci beaucoup pour vos réponses NHenry et Baboon 2000! Mais en fait j'ai pas le choix je ne sais pas codé en C++... Mais en fait je crois avoir trouvé une solution, je vais passé directement par la carte d'acquisition qui as une fréquence d'échantillonnage max de 625 kéch./s (donc qui peut faire une mesure toute les 16 micro-sec...),j'ai les dll de la carte qui permettent de l'utiliser. Mais après ça ne sera pas du temps réel...

Par contre je n'ai pas très bien compris les inconvénients de GetTickCount?

Merci encore,

Matthias

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
18 oct. 2010 à 19:30
Bonjour,

GetTickCount est en Millisecondes, pas en Microsecondes.
Pour ça, je crois que c'est les API QueryPerformanceCounter et QueryPerformanceFrequency, à vérifier.

Mon site
Rejoignez-nous