Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/03/2006, à 10:32

hello_world

Gérer le temps en c++

Bonjour!

Je me suis lancé dans un programme en c++, plus pour reviser certaines notions et en apprendre de nouvelles que pour le resultat. Le but serait de faire un programme du même genre que les tamagoshis... pour ceux qui s'en rappellent.

Le problème c'est que pour un tel programme j'ai besoin de gerer le temps... c'est-à-dire d'appeller certaines fonctions tout les x secondes. Mais je ne sais pas du tout comment faire ça. J'ai cherché du côté de time.h... mais sans grand succès.

Actuellement j'ai une boucle infinie dans mon main avec un wait dedans qui appelle une fonction appelle qui appelle toutes les fonctions qui doivent être appellée. Ou si vous preferez:

main
{
for(int i(1);i>0, i++)
       {
        wait 2;
        appelle();
        }
}

void appelle()
{
if(t=t_matin)
      {
        matin();
      }
if (t=t_soir)
       {
         soir();
        }
}

void matin()
{
cout << "c'est le matin " << endl;
}

void soir()
{
cout << "c'est le soir" << endl;
}


voilà, c'était juste pour l'idée, il manque évidement les declarations de variable, de fonctions et autre... et je ne suis pas sur que ma boucle soit bien infinie.  Le programme compile et fontione parfaitement. Toutefois je trouve le code vraiment horrible.

Comment puis-je faire pour l'écrire plus proprement. J'ai cherché sur internet et tout ce que je trouve c'est ça :http://www.microprocess.com/formation/langages/L4.htm ... génial.

Je cherche juste quelques pistes. Pour la suite google sera mon ami ;-)

Merci beaucoup!

++

Hors ligne

#2 Le 27/03/2006, à 10:52

gene69

Re : Gérer le temps en c++

et du coté de  gettimeofday() ?

ou sinon  time() :



Je suis pas un dieu en C++ mais ce qui est possible en C est aussi possible en C++, Non?


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#3 Le 27/03/2006, à 11:09

gene69

Re : Gérer le temps en c++

je ne pense pas que tu ais besoin d'interruptions.

PS si tu veux que ça soit compilable pour Windows, gettimeofday() n'existe pas. avec un bloc #ifndef WIN32 ... regarde du coté de GetTickCount().

apres c'est peut être pas ce que tu cherches...


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#4 Le 27/03/2006, à 12:13

zeugme

Re : Gérer le temps en c++

d'une maniere generale, il ne faut pas utiliser la boucle infinir = attente active.
Il est preferable d'utiliser un timer de de se faire appeler par le timer tous les ...
Les timers sont en nombre limite, donc il ne faut pas en utiliser un pour chaque delai, mais un seul arme sur le dernier delai le plus proche.

Il doit y avoir une API pour ca en C a chercher sur google par exemple.
http://www.montefiore.ulg.ac.be/service … c2/timer.c

Sinon, je n'ai pas plus de details, le C ca remonte a 15 ans pour moi.
Si tu veut le faire en Java ,la he peut te donner les details.

Hors ligne

#5 Le 27/03/2006, à 15:12

thx1138

Re : Gérer le temps en c++

jbb a écrit :

[...]Si tu veut le faire en Java ,la he peut te donner les details.

En Java c'est facile. Y'a la classe Timer (et TimerTask), et y'a Quartz.

Mais il est vrai que je n'ai jamais fait ça en C++...
Peut-être un thread qui s'endort pendant x temps ?


They did not know it was impossible, so they did it - Mark Twain

Hors ligne

#6 Le 28/03/2006, à 01:56

gene69

Re : Gérer le temps en c++

çà c'est une bonne idée un thread qui s'endort.
Mais la fonction qui fait ça simplement c'est une fonction qui est tombée en désuétude. Pour etre précis c'est celle qui permet d'abandoner le temps d'execution. yeld() un truc comme ça. il faut faire un cond wait... mais bon puisque tu touche un peut java tu vois que l'objet thread et l'objet timer n'ont rien en commun.

Maintenant si tu veux un thread qui fait dodo en C il te faudra un mutex une condition et une structure à la c*n pour renseigner la durée.


Et puis l'attente active.... parfois ça va bien... je ne saurai pas faire une interruption en C.

Bon allé... qu'est ce que tu vas faire?


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#7 Le 28/03/2006, à 09:21

hello_world

Re : Gérer le temps en c++

Bon, je vais essayer de suivre les conseils de jjb... Merci beaucoup pour l´aide. Je reviens poster des que j´ai essaye.

++

Hors ligne

#8 Le 28/03/2006, à 09:33

m+rh-e

Re : Gérer le temps en c++

autrement, si tu utilise gtk, tu peut utiliser le timeout:

class myTimer
{
public:
  myTimer();
  
  bool onElapsed(void);
  
private:
  int counter;
};


#include <glibmm.h>

myTimer::myTimer()
{
  counter = 0;
  Glib::signal_timeout().connect(sigc::mem_fun(*this, &myTimer::onElapsed), 1000);
}

bool myTimer::onElapsed()
{
 return (++counter != 10);
}

Hors ligne

#9 Le 28/03/2006, à 09:52

hello_world

Re : Gérer le temps en c++

Voila qui m´interesse... j´ai vu que QT fournissait un timer. Mais comme je suis sous gnome, je vais plutot chercher du cote de gtk... merci bien pour l´aide!

++

Dernière modification par hello_world (Le 28/03/2006, à 11:58)

Hors ligne