[C, C++] Timer et fonction membre d'une classe

Timer et fonction membre d'une classe [C, C++] - C++ - Programmation

Marsh Posté le 07-04-2003 à 15:19:34    

Je souhaite utiliser un timer dans mon application , j'appelle donc la fonction  
 

Code :
  1. SetTimer(
  2.     HWND hWnd, // handle of window for timer messages
  3.     UINT nIDEvent, // timer identifier
  4.     UINT uElapse, // time-out value
  5.     TIMERPROC lpTimerFunc  // address of timer procedure
  6.    );


 
Cela marche bien, mais le problème vient du dernier paramètre à fournir qui est une fonction CALLBACK à appeler chaque fois que le timer se déclenche...
 

Code :
  1. VOID CALLBACK GlobalEngineTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
  2. {
  3. //trucs a faire
  4. //comme ca cela fonctionne
  5. }


 

Code :
  1. VOID CALLBACK MaClasse::GlobalEngineTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
  2. {
  3. //trucs a faire
  4. //mais pas comme cela
  5. }


 
 
Tout fonctionne bien si la fonction est déclarée normalement, mais je veux que cette fonction fasse partie d'une classe qui encapsule plein d'autres choses... mais problème, dans ce cas la, à la compilation il refuse de compiler avec la fonction callback de la classe.
 
Est ce que quelqu'un sait si on peut le faire d'une part et d'autre part si c'est le cas, comment on peut le faire ???

Reply

Marsh Posté le 07-04-2003 à 15:19:34   

Reply

Marsh Posté le 07-04-2003 à 15:26:32    

Tu as essayer de déclarer le SetTimer à l'interieur de ta classe?

Reply

Marsh Posté le 07-04-2003 à 15:31:18    

billyboy78 a écrit :

Je souhaite utiliser un timer dans mon application , j'appelle donc la fonction  
 

Code :
  1. SetTimer(
  2.     HWND hWnd, // handle of window for timer messages
  3.     UINT nIDEvent, // timer identifier
  4.     UINT uElapse, // time-out value
  5.     TIMERPROC lpTimerFunc  // address of timer procedure
  6.    );


 
Cela marche bien, mais le problème vient du dernier paramètre à fournir qui est une fonction CALLBACK à appeler chaque fois que le timer se déclenche...
 

Code :
  1. VOID CALLBACK GlobalEngineTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
  2. {
  3. //trucs a faire
  4. //comme ca cela fonctionne
  5. }


 

Code :
  1. VOID CALLBACK MaClasse::GlobalEngineTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
  2. {
  3. //trucs a faire
  4. //mais pas comme cela
  5. }


 
 
Tout fonctionne bien si la fonction est déclarée normalement, mais je veux que cette fonction fasse partie d'une classe qui encapsule plein d'autres choses... mais problème, dans ce cas la, à la compilation il refuse de compiler avec la fonction callback de la classe.
 
Est ce que quelqu'un sait si on peut le faire d'une part et d'autre part si c'est le cas, comment on peut le faire ???


fais des recherche sur le forum: une callback au sens "C" du terme ne peut pas être une méthode de classe SAUF si celle-ci est statique. Il y a deja eu de nombreux post à ce sujet.
 
Donc fonction membre statique, dans laquelle tu commence par rechercher l'instance de la classe qui est concernée.

Reply

Marsh Posté le 07-04-2003 à 15:32:02    

Bounty a écrit :

Tu as essayer de déclarer le SetTimer à l'interieur de ta classe?


 
 
Oui oui, en fait l'appel à SetTimer() se fait dans le contructeur de la classe

Reply

Marsh Posté le 07-04-2003 à 15:32:19    

Bounty a écrit :

Tu as essayer de déclarer le SetTimer à l'interieur de ta classe?


La fonction SetTimer est une fonction de l'API win32...

Reply

Marsh Posté le 07-04-2003 à 15:34:11    

sowhatin22 a écrit :


fais des recherche sur le forum: une callback au sens "C" du terme ne peut pas être une méthode de classe SAUF si celle-ci est statique. Il y a deja eu de nombreux post à ce sujet.
 
Donc fonction membre statique, dans laquelle tu commence par rechercher l'instance de la classe qui est concernée.


 
Ok merci je vais regarder de ce coté la, mais que veux tu dire par "rechercher l'instance de la classe qui est concernée"
???

Reply

Marsh Posté le 07-04-2003 à 19:11:32    

billyboy78 a écrit :


 
Ok merci je vais regarder de ce coté la, mais que veux tu dire par "rechercher l'instance de la classe qui est concernée"
???


Quand la méthode statique de la classe est appelée, tu n'as accès qu'aux variables statiques de la classe. Si tu veux excecuter une méthode non statique, et donc reliée à une instance, alors il faut savoir de quelle instance il s'agit. C'est comme une callback de type "C", saut que tu as accès aux membres et méthodes statiques de la classe, qui peuvent être privés et donc inaccessibles si tu utilise une "vraie" callback de type "C".

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed