[ VC++ ] Les timers sont-ils "locaux" à un formulaire

Les timers sont-ils "locaux" à un formulaire [ VC++ ] - C++ - Programmation

Marsh Posté le 22-12-2005 à 17:11:52    

Bonjour,
 
Dernièrement, j'ai eu un bug sur mon appli.  
Quasi-impossible à tracer malheuresement, bug aléatoire que je soupçonne être lié à un traitement RT.
Donc j'ai bien relu mon code et fait quelques modifs.
 
Parmis celles-ci, j'ai remarqué que j'avais deux timers chacun dans un formulaire différent. Le premier formulaire appelant le second, j'ai donc deux timers qui tournent en simultané.
--------------
Mais l'appel était identique dans ces deux formulaires:
 
SetTimer(3,30000,0);
 
3 étant mon numéro de timer.
--------------
mon événement OnTimer était le suivant dans les deux formulaires.

Code :
  1. Formulaire A
  2. void form1::OnTimer(UINT nIDEvent)
  3. {
  4.   switch (nIDEvent)
  5.   {
  6.     case 3:
  7.     {fonction_A;}break;
  8.   }
  9.   CDialog::OnTimer(nIDEvent);
  10. }
  11. Formulaire B
  12. void form1::OnTimer(UINT nIDEvent)
  13. {
  14.   switch (nIDEvent)
  15.   {
  16.     case 3:
  17.     {fonction_B;}break;
  18.   }
  19.   CDialog::OnTimer(nIDEvent);
  20. }


Du fait que mon timer tA du formulaire fA et le timer tB du formulaire fB aient le même numéro de timer et s'exécutent au même moment je me suis posé la question suivante :
 
Si tA se "déclenche", est-ce que seul l'événement OnTimer du formulaire A sera executé ou bien est-ce que tous les événements OnTimer dont les formulaires sont en cours d'éxécution seront executés (donc le déclenchement de tA exécutera OnTimer dans les deux formulaires car numéro identique)  ???
 
Merci a ceux qui prendront le temps de lire/répondre. Mon bug est ptet ailleurs mais c'est la seule piste que j'ai actuellement :sweat:


Message édité par jeoff le 22-12-2005 à 17:12:53
Reply

Marsh Posté le 22-12-2005 à 17:11:52   

Reply

Marsh Posté le 22-12-2005 à 18:20:55    

Théoriquement chaque timer est indépendant, mais je n'ai jamais essyé en donnant des numéros identiques pour plusieurs timers.
Par ailleurs, il faut savoir que les timers ne sont pas très précis, donc il peut arriver que deux timers indiquent le même temps. D'autre part, pour que l'évènement associé à un timer soit exécuté, il faut que la fenêtre puisse retirer le message du timer de la file d'attente. Or la boucle de traitement des messages peut parfois être ralentie par d'autres processus, et la file d'attente des messages peut être assez encombrée dans certaines circonstances. Donc plutôt qu'un timer, on utilise souvent d'autres moyens de synchronisation, tel un drapeau en mémoire global, ou dans un atome, ou dans un fichier, ou un WaitForSingleObject() quand on a différentes threads.

Reply

Marsh Posté le 23-12-2005 à 10:20:35    

Je désactive désormais le timer en cours avant de lancer le formulaire suivant, tous les timers ont un n° différent. Pour l'instant ca ne plante plus mais bon ... ca ne veux pas forcèment dire que j'ai résolu le problème :/ d'où ma question sur la "localité" des timers.
 
Je n'ai pas l'utilité de synchroniser les formulaires entre eux, les timers servent juste ici à des fins de rapatriment de données à intervalles réguliers pour rafraichir l'affichage. Donc inutile de rafraichir un formulaire en arrière plan :).
 
Merci pour le cours particulier ;) ca m'éclaire au moins sur une partie du fonctionnement :jap:

Reply

Sujets relatifs:

Leave a Replay

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