Probleme de source pour un timer!!! Help!!!

Signaler
Messages postés
10
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2003
-
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
-
Salut!
J'ai créer un timer en C++ dans une application windows (MFC), et en le verrifiant manuellement, il doit marcher... Cependant, il y a une couille! En fait, je lui demande par exemple d'afficher qqchose toutes les seconde et en tout 3 fois, et le compilateur n'affiche le résultat qu'a la fin de la boucle au lieu de l'afficher une fois par seconde!
Est ce que quelqu'un peut m'aider! Je suis en galère depuis 1 semaine!!!
Je vous join le programme que j'ai fais!
Merci d'avance...
----------------------------------------------------------------------
void CTimer::OnOK()
{
CString chaine;
unsigned int inter,temps,boucle ;
UpdateData(true);
inter = m_duree;
temps = inter;
UpdateData(true);
chaine = m_texte;
UpdateData(true);
boucle = m_boucle;
time_t actuel;
actuel = time (NULL);
time_t heure_depart;
heure_depart = time (NULL);

while (boucle != 0)
{
while (difftime(actuel, heure_depart) < temps)
{
Sleep(1000);
actuel = time(NULL);
}

UpdateData(true);
m_edit += chaine;
UpdateData(false);
Beep(200,1000);
boucle --;
heure_depart = time (NULL);
}
}
----------------------------------------------------------------------

2 réponses

Messages postés
10
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2003

-------------------------------
Réponse au message :
-------------------------------

> Salut!
> J'ai créer un timer en C++ dans une application windows (MFC), et en le verrifiant manuellement, il doit marcher... Cependant, il y a une couille! En fait, je lui demande par exemple d'afficher qqchose toutes les seconde et en tout 3 fois, et le compilateur n'affiche le résultat qu'a la fin de la boucle au lieu de l'afficher une fois par seconde!
> Est ce que quelqu'un peut m'aider! Je suis en galère depuis 1 semaine!!!
> Je vous join le programme que j'ai fais!
> Merci d'avance...
> ----------------------------------------------------------------------
> void CTimer::OnOK()
> {
> CString chaine;
> unsigned int inter,temps,boucle ;
> UpdateData(true);
> inter = m_duree;
> temps = inter;
> UpdateData(true);
> chaine = m_texte;
> UpdateData(true);
> boucle = m_boucle;
> time_t actuel;
> actuel = time (NULL);
> time_t heure_depart;
> heure_depart = time (NULL);
>
> while (boucle != 0)
> {
> while (difftime(actuel, heure_depart) < temps)
> {
> Sleep(1000);
> actuel = time(NULL);
> }
>
> UpdateData(true);
> m_edit += chaine;
> UpdateData(false);
> Beep(200,1000);
> boucle --;
> heure_depart = time (NULL);
> }
> }
> ----------------------------------------------------------------------
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
une remarque préliminaire :
Pourquoi essayer de faire un timer à partir de rien
Pourquoi ne t'appuies tu pas sur SetTimer
UINT_PTR SetTimer(
HWND hWnd, // handle to window
UINT_PTR nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // timer procedure
);

Créer un timer est relativement complexe car nécessite des connaissances en multi-thread

Sais tu que lorsque tu emploies Sleep(1000), ton thread (unique) est endormi et donc que ton application ne traites plus ses messages

D'aytre part, il y a beaucoup trop de UpdateData dans ton code