...

... - C++ - Programmation

Marsh Posté le 22-02-2007 à 19:44:53    

...


Message édité par allez-paris le 14-03-2008 à 16:40:47
Reply

Marsh Posté le 22-02-2007 à 19:44:53   

Reply

Marsh Posté le 22-02-2007 à 20:04:23    

tu fait un thread avec un test toutes les secondes sur une variable qui contient le temps de la dernière action.
Dans ton application, a chaque action utilisateur tu update cette variable.
 
Maintenant cette solution est vraiment "bourrine" il y a peut etre d'autres possibilitées

Reply

Marsh Posté le 22-02-2007 à 20:07:19    

...


Message édité par allez-paris le 14-03-2008 à 16:40:57
Reply

Marsh Posté le 22-02-2007 à 20:17:57    

...


Message édité par allez-paris le 14-03-2008 à 16:41:02
Reply

Marsh Posté le 23-02-2007 à 11:48:58    

Koyomi a écrit :

tu fait un thread avec un test toutes les secondes sur une variable qui contient le temps de la dernière action.
Dans ton application, a chaque action utilisateur tu update cette variable.
 
Maintenant cette solution est vraiment "bourrine" il y a peut etre d'autres possibilitées


Moi je dirais l'inverse:
Tu fais un thread pour faire tes actions et c'est dans le programme principale qui controle le thread en utilisant un timer et engerant et transmettant les E/S clavier au thread.
Sinon quel est l'environnement exact (windows/linux, mode concole/GUI)?


Message édité par breizhbugs le 23-02-2007 à 11:50:02
Reply

Marsh Posté le 23-02-2007 à 12:41:27    

...


Message édité par allez-paris le 14-03-2008 à 16:41:05
Reply

Marsh Posté le 23-02-2007 à 15:01:08    

Je dois dire qu'en C++ je sais pas, mais en C y avait kbhit() qui pourrait faire l'affaire mais je ne suis pas sur que ce soit standard/portable.

Reply

Marsh Posté le 25-02-2007 à 20:19:25    

Quand je faisais ça sous Linux (en C) j'utilisais des alarm(0) pour réinitialiser le timer et des alarm(3000) (ou alarm(3), je sais plus) pour le faire attendre 3 secondes.
Avec il fallait programmer un handler et déclarer ce handler pour le signal SIGALRM. Le handler était appelé quand le temps était écoulé.

 

Edit :
En fait je faisais ça dans une boucle infinie dans un programme à base de XLib.

Code :
  1. Déclarer handler de SIGALRM
  2. alarm(3)
  3. while (true)
  4. {
  5.   Scruter les entrées -> entrée
  6.   if (Valide(entrée))
  7.   {
  8.     alarm(0)
  9.     doAction()
  10.     alarm(3)
  11.   }
  12. }


Et quand il ne se passe rien c'est le handler de SIGALRM qui est appelé. Dedans il faut faire un exit.


Message édité par Dost67 le 25-02-2007 à 20:23:13
Reply

Sujets relatifs:

Leave a Replay

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