PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.c++ > timer 1ms
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
timer 1ms

Réponse
 
LinkBack Outils de la discussion
Vieux 28/03/2008, 11h03   #1
J-F Portala
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut timer 1ms

Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)

Merci de vos suggestions
Jeff


  Réponse avec citation
Vieux 28/03/2008, 11h19   #2
Michael DOUBEZ
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala a écrit :
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
> Le but est d'aller lire à plusieurs adresses des valeurs analogiques
> (numérisees par une carte dédiée (pilote uniquement sous windows).)
> J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
> correspondante est autour de 10ms.
>
> J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
> ce moment je vais lire les adresses,
> soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
> vais lire sans arrêt aux adresses)
>
> Merci de vos suggestions
> Jeff



Est ce qu'il n'y aurait pas usleep aussi ou nanosleep() (je sais pas si
c'est POSIX) ?

Sinon, certain utilisent select (ou l'équivalent sous XP) pour faire des
timers.

Michael
  Réponse avec citation
Vieux 28/03/2008, 18h56   #3
diablo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala a écrit :
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
> Le but est d'aller lire à plusieurs adresses des valeurs analogiques
> (numérisees par une carte dédiée (pilote uniquement sous windows).)
> J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
> correspondante est autour de 10ms.
>
> J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
> ce moment je vais lire les adresses,
> soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
> vais lire sans arrêt aux adresses)
>
> Merci de vos suggestions
> Jeff
>
>


un timer à 1ms ne sera jamais précis à 1ms, selon moi ...

--
-uTb#`diablo PWed by GNU/Linux Debian on Diablo
  Réponse avec citation
Vieux 29/03/2008, 02h18   #4
Frederic Lachasse
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala wrote:
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
> Le but est d'aller lire à plusieurs adresses des valeurs analogiques
> (numérisees par une carte dédiée (pilote uniquement sous windows).)
> J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
> correspondante est autour de 10ms.
>
> J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
> ce moment je vais lire les adresses,
> soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
> vais lire sans arrêt aux adresses)


Voir les API multimédia de Windows:

timeBeginPeriod
timeEndPeriod
timeGetDevCaps
timeGetSystemTime
timeGetTime
timeKillEvent
TimeProc
timeSetEvent

Et pour plus de précision dans le calcul de temps:
QueryPerformanceCounter
QueryPerformanceFrequency

--
Frédéric Lachasse - ECP86
  Réponse avec citation
Vieux 29/03/2008, 14h47   #5
Pierre Maurette
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala, le 28/03/2008 a écrit :
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
> Le but est d'aller lire à plusieurs adresses des valeurs analogiques
> (numérisees par une carte dédiée (pilote uniquement sous windows).)
> J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
> correspondante est autour de 10ms.


Et de toutes façons, le thread est *à priori* dans son propre temps, et
n'existe pas dans dans certaines périodes du vrai temps.

> J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
> ce moment je vais lire les adresses,
> soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
> vais lire sans arrêt aux adresses)


Je vais certainement écrire des conneries, ça fait un moment que je
n'ai pas fait du bas niveau sous XP. Mais si ça peut vous servir...
XP standard (je ne connais pas embedded, par exemple) n'est pas un OS
temps réel. On peut lire le temps machine et le temps processus sans
problème, mais il est impossible simplement de générer des intervalles.
J'avais il y a longtemps fait des tests sous C++ Builder ou Delphi,
c'est pareil pour ce qui nous intéresse. Le timer VCL était calamiteux,
la fenêtre était si je me souviens bien de 30ms, à l'époque des
horloges de l'ordre de 0,5 à 1,5 GHz. En diminuant la consigne du timer
puis en bouclant sur RDTSC dans un thread, on arrivait à s'en sortir,
au prix d'une charge processeur temporaire donc acceptable. Mais même
en jouant sur la priorité - aucune influence, d'ailleurs - on ne
pouvait se prémunir avec certitude de la prise de contrôle du noyau.
Il existe peut-être des solutions dans les API, il est possible
d'écrire un driver, mais on casse alors ce qui fait l'intérêt de XP. Et
une machine XP dédiée à un seul contrôle hard, c'est débile.
La solution normale est à mon avis de déléguer à la périphérie la
gestion de l'interface entre le temps réel et l'asynchrone. C'est
élégant et confortable, vous gérez facilement à haut niveau (presque)
autant d'interface acquisition - actionneur - etc. - que vous le
souhaitez.
Si vous avez une carte du commerce adaptée à une période de mesure
inférieure ou égale à la milliseconde, et qu'elle est dédiée à XP, la
solution devrait se trouver dans sa documentation.
Si la carte est développée en interne, c'est à elle de gérer le temps
réel et ensuite sérialiser les échantillons.
Dans le cas qui n'est certainement pas le vôtre d'un périphérique
d'acquisition sur une liaiason série ou autre, il est sans doute
rentable d'intercaler un microcontrôleur - PIC par exemple - entre le
pécé et le boîtier.

--
Pierre Maurette


  Réponse avec citation
Vieux 29/03/2008, 15h33   #6
Sylvain SF
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala wrote on 28/03/2008 11:03:
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
> Le but est d'aller lire à plusieurs adresses des valeurs analogiques
> (numérisees par une carte dédiée (pilote uniquement sous windows).)


et cette care dédiée (de quelle marque et quelle nature ?) ne propose
pas l'envoi bufferisé de ces valeurs selon un timer hard qui lui est
propre ? (bcp de cartes NI feraient ça).

Sylvain.
  Réponse avec citation
Vieux 29/03/2008, 15h43   #7
selys
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: timer 1ms

J-F Portala wrote:
> Bonjour,
> je souhaiterais avoir un timer à la milliseconde.(sous windows XP)


Spécifique OS.
Voir sur fr.comp.os.ms-windows.programmation
où ça a été discuté des dizaines de fois.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 23h59.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,11721 seconds with 15 queries