Pages : 1
#1 Le 18/07/2006, à 14:36
- steph12358
Thread sous Anjuta+Gtkmm+Glade
Bonjour à tous
je développe sous Anjuta+Gtkmm+Glade pour les interfaces, une appli
sous ubuntu.
j'utilise dans mon appli un timer pour rafraîchir l'écran (ttes les "freq" secondes), fonction "flipImages"
et un autre pour effectuer d'autres opérations (toutes les secondes).
J'utilise un spinButton pour changer la fréquence "freq" de rafraîchissement, mais...
mon timer reste à 3 secondes d'intervalles...
voici mon code (extrait)
//valeur par défaut
dans mon .hh
SigC::Connection flipTimer;
dans mon .cc
freq=3 //3 secondes par défaut...
SigC::Connection flipTimer;
flipTimer = Glib::signal_timeout().connect(SigC::slot(*this, &fenFlip::flipImages), freq*1000);
plus loin dans une boucle appelée toutes les secondes (2nd timer) :
if (flipTimer.connected())
{
//on déconnecte
flipTimer.disconnect();
//on redéfinit en changeant l'intervalle
flipTimer = Glib::signal_timeout().connect(SigC::slot(*this, &fenFlip::flipImages), freq*1000);
//On affiche la nouvelle valeur de refresh dans la barre de titre pour vérifier
this->set_title("toutes les "+intToString(freq)+" seconde(s)");
}
La valeur de "freq" est bien changée mais le timer reste à 5 secondes d'intervalle.
Je suis dessus depuis 3 jours mais là, je cale !
Qqun a une idée? Merci
Hors ligne
#2 Le 25/07/2006, à 08:21
- steph12358
Re : Thread sous Anjuta+Gtkmm+Glade
Bonjour, c'est moi à nouveau
Je simplifie l'énoncé :
Comment créer un timer "monTimer" appelant une fonction "maFonction" dans une fenetre "maFenetre", avec une périodicité "maPeriodicite",
puis en cours d'exécution, changer la périocidité du timer ?
ex: La périodicité peut être modifiée par l'utilisateur avec un slider ("potar").
//1000 pour une seconde d'intervalle d'exécution : 1000 ms = 1s
maPeriodicite = 1000; //par défaut
SigC::Connection flipTimer;
monTimer = Glib::signal_timeout().connect(SigC::slot(*this, &maFenetre::maFonction), maPeriodicite );
Puis en cours d'exécution, ceci pour tenter de changer la periode du timer :
if (monTimer.connected())
{
maPeriodicite = 5000;
//on déconnecte
monTimer.disconnect();
//on redéfinit en changeant l'intervalle
monTimer = Glib::signal_timeout().connect(SigC::slot(*this, &maFenetre::maFonction), maPeriodicite );
//On vérifie le changement de valeur
this->set_title("toutes les "+intToString(maPeriodicite /1000)+" seconde(s)");
}
Mais voilà ca ne marche pas :0(
On reste avec une péridiocité d'exécution de 1 seconde.
Quelqu'un a une idée ?
Hors ligne
#3 Le 28/07/2006, à 13:52
- idroxid
Re : Thread sous Anjuta+Gtkmm+Glade
Le tout avec gtkmm 2.4 et donc sigc++ >= 2.0:
sigc::slot<bool> my_slot = sigc::bind(sigc::mem_fun(*this, &maFenetre::maFonction), m_timer_number);
sigc::connection conn = Glib::signal_timeout().connect(my_slot, maPeriodicite );
cf http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/ch20.html#id2536513