Timer C++ & Methode non static [Résolu]

watoubilly 36 Messages postés dimanche 9 mars 2003Date d'inscription 21 mai 2009 Dernière intervention - 18 déc. 2005 à 16:24 - Dernière réponse : luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention
- 19 déc. 2005 à 18:00
bonjour,
je souhaiterais réaliser un timer dans une classe C++ qui appel une methode de cette meme class.
Mon pb est que cette classe ne dispose pas des propriétés d'une fenetre (CWnd).
Donc SetTimer(numTimer,Delay) ne marche pas car je n'arrive pas a mettre en place le WM_TIMER.
Ensuite j'ai essayé le SetTimer avec la fonction CALLBACK et ca ne marche que pour une fct C ou C++ static.
Donc si cé static j'ai plus acces a mes variables membres.

Y'a t'il une autre methode pour faire ce Timer ??
Le but etant de faire une attente d'une seconde environ mais que ca ne blok pas le refresh de ma fenetre.
Donc inutile de me parler de Sleep ou d'heure System dans une boucle...

Merci d'avance !
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 19 déc. 2005 à 12:24
3
Merci
Moi j'utilise la libraire glib pour ca.

g_timeout_add(func, time, arg) exécute une certaine fonction toute est x milliseconde. (je suis pas sur des arguments)



http://developer.gnome.org/doc/API/2.0/glib/glib-The-Main-Event-Loop.html#g-timeout-add



Pour ton problème de static, ca deja été rabaché sur ce forum. Tu peux
utiliser une fonction static, a laquelle tu envois en argument le
pointeur de l'objet a modifié. C'est tout simple.

Merci luhtor 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de luhtor
watoubilly 36 Messages postés dimanche 9 mars 2003Date d'inscription 21 mai 2009 Dernière intervention - 19 déc. 2005 à 12:34
0
Merci
Ha ouais, ca a pas l'air con ce que tu dis sur le passage de l'objet a ma fct timer !!
Cé un peu crad d'un point de vu POO mais moi ca me plait bien.

Mon, je vais essayer de faire ca !!
Merci luthor.

;lmkl
Commenter la réponse de watoubilly
watoubilly 36 Messages postés dimanche 9 mars 2003Date d'inscription 21 mai 2009 Dernière intervention - 19 déc. 2005 à 13:19
0
Merci
Bon j'essaye de faire ton truc et je vois pas trop comment faire.
J'ai ça...
Je voudrais afficher la variable "toto" de ma classe dans une boite de dialog.

Mais ou passer un poiteur sur mon objet a la methode static.

"Mon.h"
class CTestDlg : public CDialog
{
CString toto;


static VOID CALLBACK MyTimerProc(
HWND hwnd, // handle to window for timer messages
UINT message, // WM_TIMER message
UINT idTimer, // timer identifier
DWORD dwTime) // current system time
{
AfxMessageBox(toto);
}
}

"Mon.cpp"
CTestDlg::OnOK()
{
toto="allo";
::SetTimer(0, // handle to main window
3, // timer identifier
5000, // 5-second interval
(TIMERPROC) this->MyTimerProc); // timer callback
}

;lmkl
Commenter la réponse de watoubilly
watoubilly 36 Messages postés dimanche 9 mars 2003Date d'inscription 21 mai 2009 Dernière intervention - 19 déc. 2005 à 13:20
0
Merci
ATTENTION : Ma vrai classe n'herite de rien !!

;lmkl
Commenter la réponse de watoubilly
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 19 déc. 2005 à 18:00
0
Merci
Et bien, tu peux pas passer un argument avec la fonction SetTimer ?
Doit surement y avoir un moyen. Mais comme j'ai jamais utilisé windows
en programmation, je peux pas trop t'aider :)

Si OnOK peut pas etre appelé plusieurs, tu peux créer un pointeur
static dans ta classe qui contient le pointeur de l'objet qui a appelé
le callback. Mais bon, c'est crade et ca ne s'applique peut etre pas
dans ton cas.
Commenter la réponse de luhtor

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.