évènement régulier [Résolu]

Mastersam 116 Messages postés dimanche 26 septembre 2004Date d'inscription 13 février 2008 Dernière intervention - 10 nov. 2005 à 21:10 - Dernière réponse : Mastersam 116 Messages postés dimanche 26 septembre 2004Date d'inscription 13 février 2008 Dernière intervention
- 11 nov. 2005 à 22:44
Bonjour j'ai besoin dans mon programme sur windows en C développé sous dev-cpp de produire un évènement qui se déclenche à intervalle régulier de 23ms, qu'il ne se déclenche pas avant ces 23 mais qu'il en soit le plus proche possible.

J'ai essayé de "réguler" un timer pour tenir compte de la vitesse d'execution du PC du genre:
if(lastsenttrame-lastcalcul+attente<23)attente++;else attente--;
SetTimer(hwnd, IDT_TIMERDMX, attente, (TIMERPROC) NULL);

mais je suis toujours largement au dessus des 23ms .

Je voudrais trouver autre chose que l'utilisation d'un timer dans une fenètre qui est trop dépendent de l'activité du PC (Retard dans le traitement du message).

Merci d'avance.

http://www.rc-bot.com/
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 10 nov. 2005 à 22:42
3
Merci
mets un thread dédié et dedans:

boucle:
- temps = systemtime
- Sleep(20)
while(1) {
if(currsystemtime - temps) >= 23 ms break;
}
- Lance action
goto boucle;

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de BruNews
Poufine 5 Messages postés mercredi 20 avril 2005Date d'inscription 10 novembre 2005 Dernière intervention - 10 nov. 2005 à 22:58
0
Merci
//bon voila moi j'utilise CWnd::setTimer dans un de mes programmes cpp ,mais ta fonction settimer semble à peu pres la meme
//voila comment je l'utilise
//je declare d'abord cette fonction:

void CALLBACK EXPORT TimerProc( HWND hWnd, UINT nMsg, UINT nIDEvent , DWORD dwTime )


{


//code que tu veux executer toutes les 23 ms


}
/////////////////////////////////////////////////////////////////////////


SetTimer(hwnd, IDT_TIMERDMX, 23, TimerProc);//appelle timerProc toutes les 23ms

//////////////////////////////////////////
//et quand j'en ai plus besoin:
KillTimer(IDT_TIMERDMX);

//En esperant que ca va t'aider ....
Commenter la réponse de Poufine
Mastersam 116 Messages postés dimanche 26 septembre 2004Date d'inscription 13 février 2008 Dernière intervention - 11 nov. 2005 à 22:44
0
Merci
Bon j'ai fait la solution de Brunews car celle de poufine était trop proche de la mienne j'avais besoin de traiter l'execution en dehors du programme et indépendemment d'une pile de message (d'ou le thread). J'ai cependant préféré un deuxième while(1) à la place du goto qui fait souvent dresser les cheveux de certains profs.

Merci pour les réponses et à bientôt.

http://www.rc-bot.com/
Commenter la réponse de Mastersam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.