Timers haute précision

SMarmotte Messages postés 53 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 12 novembre 2005 - 25 sept. 2003 à 08:53
cs_olecossois Messages postés 18 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 mars 2008 - 26 sept. 2003 à 12:48
Bonjour à tous

Je cherche à attendre EXACTEMENT 60 micro secondes.

J'ai fait cette routine mais elle me bouffe 50% du temps CPU du fait que je dois l'appeler 1000 fois par secondes (j'en ai besoin pour communiquer avec une carte électronique connectée sur LPT1) :

// Compilé sous VC 6.0 SP 5
void udelay(unsigned int delay) 
{ 
    unsigned __int64 nCtr=0, nFreq, nCtrStop; 
    QueryPerformanceFrequency((LARGE_INTEGER*)&nFreq); 
    QueryPerformanceCounter((LARGE_INTEGER*)&nCtrStop); 
    nCtrStop+=(__int64)((nFreq*(__int64)(delay-3))/1000000);
    for(;nCtr<nCtrStop;) 
        QueryPerformanceCounter((LARGE_INTEGER*)&nCtr); 
    return; 
}


Je cherche un moyen de dire au kernel de Windows que pendant cette attente, il doit passer le controle à un autre thread comme le fait la fonction Sleep que jai essayée.

Le problème c'est que Sleep ne fonctionne que par pas de 10 ms sur NT (alors moi qui veut 60µs ....)

Je sais aussi qu'il existe la fonction NtDelayExecution, qui permet d'attendre en 100nanosecondes (Waow !!) mais elle aussi ne fonctionne que par pas de 10 ms :-((

Donc si quelqu'un peut me proposer une fonction attendant 60 µs sans consommer de temps CPU (ou tres peu) ou si on peut me dire comment régler le pas d'attente de NtDelayExecution ... je suis preneur.

Merci à ceux qui me répondent !

PS : NtDelayExecution est une fonction non documentée de WinNT dont le prototype est (à peu près) :

</td></tr></table>
NTSATUS __stdcall NtDelayExecution(bool Alertable, LARGE_INTEGER* dq_100_nano_secondes);</td></tr></table>

1 réponse

cs_olecossois Messages postés 18 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 mars 2008
26 sept. 2003 à 12:48
A partir de 20 ms et en dessous, avec un system WIndow il n'est pas possible d'être précis, il te faut une horloge externe, qui te permettrait d'être plus précis...bonne chance et si tu y arrive préviens moi....ça peut toujours servir
0
Rejoignez-nous