superteta2003
Messages postés10Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention17 avril 2003
-
17 janv. 2003 à 14:44
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 2004
-
19 janv. 2003 à 22:49
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);
}
superteta2003
Messages postés10Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention17 avril 2003 17 janv. 2003 à 14:46
-------------------------------
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);
> }
> }
> ----------------------------------------------------------------------
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 19 janv. 2003 à 22:49
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