Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

timer 1ms

6 réponses
Avatar
J-F Portala
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

6 réponses

Avatar
Michael DOUBEZ
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

Avatar
diablo
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

Avatar
Frederic Lachasse
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

Avatar
Pierre Maurette
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

Avatar
Sylvain SF
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.

Avatar
selys
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.