TIMER EN C

felixboxer
Messages postés
28
Date d'inscription
dimanche 17 mars 2002
Statut
Membre
Dernière intervention
4 mars 2003
- 25 nov. 2002 à 23:01
karmablow
Messages postés
1
Date d'inscription
mercredi 31 décembre 2003
Statut
Membre
Dernière intervention
1 décembre 2006
- 1 déc. 2006 à 22:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10137-timer-en-c

karmablow
Messages postés
1
Date d'inscription
mercredi 31 décembre 2003
Statut
Membre
Dernière intervention
1 décembre 2006

1 déc. 2006 à 22:25
Simple mais pratique ce genre de code :)
Merci
Yeeehhoo
Messages postés
5
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
10 août 2006

10 août 2006 à 23:14
Absolument, je ne veut surtout pas associer de timer a une fenètre.

Ma fenètre sert à récupérer les valeurs que l'utilisateur choisit (ce sont des dates et des périodes uniquement, enregistrées dans des structures COleDateTime et COleDateTimeSpan).

J'utilise ici deux type de classe. La première est celle de la fenètre (que j'apelerais classe F) et la seconde est celle que j'ai créé (classe M ). La classe M contient toute les informations dont j'ai besoin pour faire les calculs.
Dans ma classe F, je fait appel à une fonction de la fenètre (que j'appelerais fonction_clique_OK() ).
Je déclare dans ma classe F une instance de M (M_instance) en tant que variable globale.

fonction_clique_OK() fait appel aux fonction de M_instance pour enregistrer les valeurs de la fenètre (grace à pleins de GetDlgItem(IDC_blabla,M_instance.blabla) ).

Je souhaite intégrer un timer dans la classe M de façon à pouvoir réaliser des operation telles que:
M_instance::startTimer()
M_instance::stopTimer()
ou tout autre action similaire à un timer classique.

Ainsi, lorsque la fenètre est fermé, les calculs liés à la classe continuent sans problème.

CEPENDANT, je suis en train de me demander si le M_instance que j'ai déclaré en tant que variable globale au début de la classe F ne va pas être détruit lui aussi lorsque ma fenètre va se fermer.

J'espère que j'ai été plus clair.
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
10 août 2006 à 22:11
Tu disais au début (ou alors j'ai mal compris) ne pas vouloir associer de timer à une fenêtre.
Une fonction callback d'une classe doit être déclarée 'static'.
Il faut stopper le timer juste avant la destruction de la fenetre.
Yeeehhoo
Messages postés
5
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
10 août 2006

10 août 2006 à 21:41
Je pense que ta fonction devrait résoudre mon problème, mais j'ai quand même quelques intérogations.

->Dans ta fonction timFunc, tu fait appel à HWND qui est un handler de fenêtre! Etant donné que je veu que mes fenètres puissent être détruites sans que cela ait de conséquences, j'ai peur pour ce qui va rester du handler en question et surtout pour le timer associé.

->Je ne peu pas intégrer la fonction "CALLBACK " dans une autre fonction ou dans une classe (sinon erreur C2601).
J'ai en effet créé une classe qui contient toute les informations necessaires aux calculs. Les informations sont récupérées depuis une fenètre .
Dans cette classe j'ai également définit des fonctions qui réalisent des calculs sur ces variables.
Je souhaiter intégrer un timer à cette classe (celui ci utilisant les variables e la classe pour gérer l'intervale de timing et la condition d'arret).

->Je ne vois pas a quel endroit je doit définir timID(=SetTimer(...)). J'ai pleins de problèmes avec ça car CALLBACK ne peut être défini à l'intérieur d'une fonction (sinon erreur C2601!) et il faut pourtant que je définisse timID au même endroit que CALLBACK

Un petit exemple de main() qui utilise cette fonction serait très aprécié et m'aiderait à éclaircir ce sac de noeud :)

Merci ;)
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
10 août 2006 à 18:08
Par exemple:

DWORD timID;

VOID CALLBACK timFunc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
// ce que tu veux ici
}

// 1 appel par secone
timID = SetTimer(0, 0, 1000, timFunc);

// stop le timer
KillTimer(0, timID);
Afficher les 18 commentaires