Tempo inférieure à 1ms en C

Forum sur la programmation d'applications fonctionnant sur PC ou MAC. Pour vos autres questions de programmation : C pour microcontrôleur, VHDL, LCD etc, utilisez la rubrique Electronique numérique et logique programmable.

Modérateur : Modérateur

JP
Administrateur
Administrateur
Messages : 2323
Inscription : 23 sept. 2003 18:14
Localisation : Strasbourg
Contact :

Tempo inférieure à 1ms en C

Message par JP »

Bonjour à tous,

Est-il possible d'avoir une tempo inférieure à la milliseconde sur un PC et en C ?

a+
JP

Sly
REGULIER
REGULIER
Messages : 79
Inscription : 14 sept. 2004 22:48
Contact :

Message par Sly »

Salut JP :)

essai de regarder si tu as acces à la variable d'environnement TickCount

en gros :
dim nb as double (en vb désolé :lol: )
nb = Environment.TickCount

+

JP
Administrateur
Administrateur
Messages : 2323
Inscription : 23 sept. 2003 18:14
Localisation : Strasbourg
Contact :

Message par JP »

Salut Sly :-D ,

Merci, je vais me documenter là dessus.

a+
JP

JP
Administrateur
Administrateur
Messages : 2323
Inscription : 23 sept. 2003 18:14
Localisation : Strasbourg
Contact :

Message par JP »

J'ai trouvé que TickCount renvoie le temps en milliseconde depuis le démarrage du PC.
Donc apparemment, on ne peut avoir une tempo inférieure à la milliseconde :(

Je continue à chercher.

hdan
HABITUE
HABITUE
Messages : 69
Inscription : 14 mars 2005 15:33

Message par hdan »

Bonjour,

Oui, à la µs. (en vc++ toujours)

fonction a voir:
QueryPerformanceCounter();

faire un fonction style:
int uwait(unsigned long usecs)
// returns -1 si pas supporté 0 si ok
{
__int64 end;
__int64 freq; //the frequency used by PerformanceCounter
__int64 lasttime; //last time counter was queried

if (!QueryPerformanceFrequency((LARGE_INTEGER*)&freq))
return (-1); // error hardware doesn't support performance counter
QueryPerformanceCounter((LARGE_INTEGER*)&lasttime);

end= lasttime + usecs * freq / 1000000; // Conversion des
microsecondes en coup d'horloge.
do
{
QueryPerformanceCounter((LARGE_INTEGER*)&lasttime);
} while (lasttime < end);
lasttime=end;
return (0);
}

hdan
HABITUE
HABITUE
Messages : 69
Inscription : 14 mars 2005 15:33

Message par hdan »

mis a part qu'il faudrait virer les init et faire gaffe au moment
ou l'on prend
QueryPerformanceCounter((LARGE_INTEGER*)&lasttime);
le tmps n'est pas compté avant.

JP
Administrateur
Administrateur
Messages : 2323
Inscription : 23 sept. 2003 18:14
Localisation : Strasbourg
Contact :

Message par JP »

Merci hdan :wink:

Répondre