IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ Discussion :

[Ruby] Executer une methode toutes les x secondes


Sujet :

GTK+

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut [Ruby] Executer une methode toutes les x secondes
    Bonjour,

    Je développe une petite appli de chat en ruby en utilisant Glade et GTK pour l'interface.

    Avec un tutorial, j'ai réussi à faire fonctionner quelque chose de mon application. J'envoie un message à un serveur (utilisation de DRB/rinda etc...). Un élément de mon programme doit toutes les 1 secondes lire un tuplespace sur le serveur. Pour l'instant, j'ai fait un bouton qui appelle une fonction qui lit ce tuplespace. Moi j'aimerais que l'appel à cette fonction se fasse tout seul.

    J'ai bien crée une boucle du genre :

    While 1
    check()
    end

    mais ça ne fonctionne pas. Voici le code de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
     
     
     
    class MonAppli
      def initialize(file, root,ts)
        @main_glade_xml = GladeXML.new(file, root) {|handler| method(handler)}
        @ts=ts
     
    end
     def on_send_clicked
    	mess =   @main_glade_xml["message"].text
     	#@main_glade_xml["Chatwindow"].text = mess	
    	@ts.write [:message, mess]
            sleep(0.5)    
            messlu = @ts.read([:message, nil])[1]
       	@main_glade_xml["Chatwindow"].text = messlu
     end
     def on_reload_ok_pressed
    	check()
    end
     
      def check
    	messlu = @ts.take([:message, nil])[1]
       	@main_glade_xml["Chatwindow"].text = messlu
      end
     
    end
    DRb.start_service
    tuple_space = Rinda::RingFinger.primary
     
    Gtk.init
    MonAppli.new("rubyIM.glade",nil,tuple_space)
    Gtk.main
     
     
    DRb.thread.join
    peux-t-on dans Glade spécifier un signal qui permettrait à l'appli d'appeler check() automatiquement toutes les x secondes (sleep(1))? Ou dois-je mettre une boucle quelque part?

    PS: Je suis un très très grand débutant en Ruby et je n'y connais presque rien sur GTK (tout fait avec des tutos).


    Merci d'avance...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    En C, g_timeout_add fait exactemnet ce que tu demandes, je sais pas le nom exact que ça a dans les bindings ruby.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    En C, g_timeout_add fait exactemnet ce que tu demandes, je sais pas le nom exact que ça a dans les bindings ruby.
    En ruby :
    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    @timer = Gtk::timeout_add(100) do check end

    @timer permettant de supprimer l'appel à la fonction grâce à :
    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk::timeout_remove(@timer)


  4. #4
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par gege2061 Voir le message
    En ruby :
    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    @timer = Gtk::timeout_add(100) do check end

    @timer permettant de supprimer l'appel à la fonction grâce à :
    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk::timeout_remove(@timer)



    Merci pour la réponse... mais je ne sais pas où place ce code dans ma mon source. Je l'ai mis dans le def initialise, dans la fonction d'un bouton de mon interface, ça fait bloquer le programme.

    Dans le main, ça ne fonctionne pas, Check() n'est jamais appelé....

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Points : 1 058
    Points
    1 058
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @timer = Gtk::timeout_add(x*1000){
    méthode
    test
    }
    Exécute méthode toutes les x secondes à condition que test retourne true. Si test retourne false à un moment méthode ne sera plus appeler.

    Documentation
    Exemple
    ZiK un lecteur audio et son blog.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Executer une action toute les x secondes.
    Par nuFox dans le forum C
    Réponses: 18
    Dernier message: 06/03/2008, 15h18
  2. PB d'execution de fonction toutes les X secondes
    Par Tukan dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 11/10/2006, 17h49
  3. Executer une fonction tout les X minutes
    Par Fabouney dans le forum C
    Réponses: 6
    Dernier message: 07/08/2006, 19h33
  4. Appel d'une procedure toute les S secondes
    Par thierrybatlle dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/02/2006, 13h46
  5. [Javascript] Réactualisez une page toutes les X secondes...
    Par funktastique dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 20/01/2006, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo