Timer + OpenGL

Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
- - Dernière réponse : Maegis
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
- 25 févr. 2004 à 18:14
Bonjour,
je possede un environnement MDI, qui contient une fenetre mere et deux filles (l'une des filles est en OpenGL)
J'ai mis un Timer dans la fenetre mère :

WM_CREATE:
SetTimer(hwnd, 1, 3000, NULL);
WM_TIMER
MessageBox(NULL, "iop", "iop", NULL);
WM_CLOSE:
KillTimer(hwnd, 1);

Lorsque je lance le programme, seule la fenetre mere se lance. Je reçois alors bien les MessageBox qui me montrent que le Timer marche. Je lance alors la fenetre fille qui n'a pas d'openGL, le Timer marche encore. Je lance ensuite celle qui contient l'OpenGL, le timer marche plus !!!

L'openGL bloquerait-il les messages WM_TIMER de la fenetre mere ??? Comment puis-je faire un timer alors ??

Glipper

ps : j'ai aussi essayé de faire un SetTimer(NULL, NULL, 3000, &procedure) dans le WinMain, mais il y a le même probleme.
Afficher la suite 

7 réponses

Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
0
Merci
pour ton timer avec fonction callback, tu ne dois pas mettre le & devant, car le nom d'une fonction represente deja son adresse
Commenter la réponse de sebseb42
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
0
Merci
Et ben , j'ai le meme probleme, j'utilise openGL et un timer et je ne recois aqucun message de timer, si je vire le code openGL je recois les messages de timer
Est ce que tu a reussi a ressoudre ton probleme ? Ca me serait bien utile
Commenter la réponse de Maegis
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
0
Merci
Je n'ai pas reglé le probleme, mais j'ai cette petite astuce, ce qui en revient à peu pres au même qu'un timer en fait :

dans la boucle à la fin du WinMain, j'ai rajouté une fonction que j'ai appelé Refresh() :

...
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
ReFresh();
...

et dans cette fonction, je recree une sorte de timer à l'aide de l'heure : (la fonction timeGetTime renvoi l'heure en ms....)

void ReFresh()
{
static unsigned int TimeStart = timeGetTime(),TimeStop;
TimeStop = timeGetTime();

if (TimeStop - TimeStart > 1000)
{
....
instructions toute les 1000ms
....

TimeStart = TimeStop;
}

Voila voila, en esperant que ça pourra t'aider :)
Glipper
Commenter la réponse de glipper
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
0
Merci
Ouais je crois que je vais faire la meme chose.
Merci
Commenter la réponse de Maegis
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
0
Merci
sinon avec la methode d'avant, essaye de placer ton SetTimer dans l'evenement WM_INITDIALOG et ton KillTimer dans WM_QUIT

je suis pas sure du tout, j'utilise toujours les Timer comme tu le fait dans la seconde methode, mais c'est toujours bon d'essayer autre chose pour voir si ca fonctionne

si tu essaye et que ca fonction, merci pour le feedback ;)
Commenter la réponse de sebseb42
Messages postés
140
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
19 novembre 2006
0
Merci
Moi je fais pointé mon timer sur une fonction de type Timer
je vous montre mon exemple que j'utilise pour mon doom like

/* Fonctions appelées par des timers

  Auteur : Krust

  Date : 18 02 04

*/
UINT uResult;

void CALLBACK Moves(HWND,UINT,UINT,DWORD);
void CALLBACK GetFPS(HWND,UINT,UINT,DWORD);

void CreatTimers(void){
uResult = SetTimer(hWnd,(int)1,10,(TIMERPROC) Moves);
uResult = SetTimer(hWnd,(int)2,1000,(TIMERPROC) GetFPS);
}

VOID CALLBACK Moves( 
    HWND hwnd,        // handle to window for timer messages 
    UINT message,     // WM_TIMER message 
    UINT idTimer,     // timer identifier 
    DWORD dwTime)     // current system time 
{ 

// Actions keyboard

if(keys[VK_UP]) SetPosition(1);
if(keys[VK_DOWN]) SetPosition(0);
if(keys[VK_LEFT]) SetPosition(3);
if(keys[VK_RIGHT]) SetPosition(2);

// Actions Mouse

GetCursorPos(&mousePos);
SetViewMouse(mousePos,MouseRef);
SetCursorPos(MouseRef.x,MouseRef.y);
 
}

VOID CALLBACK GetFPS( 
    HWND hwnd,        // handle to window for timer messages 
    UINT message,     // WM_TIMER message 
    UINT idTimer,     // timer identifier 
    DWORD dwTime)     // current system time 
{ 
FPS2=FPS;
FPS=0;
}



J4ai trouvé le skellette des fonction sur msdn et j'ai facilement réussi à les adapter.
je trouve ça quand même plus pratique.
====================================

KRUST
Commenter la réponse de cs_krust
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
0
Merci
Oui mais dans mon cas je ne peut pas faire [...]
Commenter la réponse de Maegis