Je précise que j'utilise les mfc sous vc6:
Voilà je voudrais créer un signal d'horloge toutes les x millisecondes (exemple un bip sonore toutes les secondes pends 10 secondes).
En créant un timer par la méthode SetTimer il suffit de placer la ligne Beep(1000,50); dans ::Ontimer.
Seulement le problème est que suivant l'utilisation du cpu, l'interval de temps entre les bips n'est pas constant.
Ma question est la suivante: A partir de ma premère ébauche ci-dessous, comment consomer le moins de ressources possible du cpu ?
Et si possible éviter le recours à la fonction Sleep.
--------------------------------------------------------------------------------------------------------------
UINT Thread_Timer(LPVOID lparam)
{
//interval (en ms) entre chaque bip
long STEP=1000;
long MyStartTime,LastBeep,elapsedtime;
MyStartTime=LastBeep=GetTickCount();
Beep(1000,50);
while(!StopThreadTimer(MyStartTime))
{
//Calcul du temps écoulé depuis l denier bip
elapsedtime=GetTickCount()-LastBeep;
//au bout de x millisecondes (ici x= STEP) un nouveau bip est émis
if (elapsedtime>=STEP)
{
LastBeep = GetTickCount();
Beep(1000,50);
//Attendre quelques milliscondes pour soulager l'utilisation du processeur
Sleep(100);
}
}
AfxEndThread(TRUE);
return 0;
}
BOOL StopThreadTimer(long MyStartTime)
{
//Durrée totale de la séquence
long DURATION=10000;
if( GetTickCount()-MyStartTime < DURATION)
return false;
return true;
}