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+ avec C & C++ Discussion :

g_timeout_add() changer la fréquence


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut g_timeout_add() changer la fréquence
    Bonjour à tous,

    La question est dans le titre de ce post. J'utilise g_timeout_add() pour appeler de manière régulière une fonction. Cependant, en cours d’exécution de mon code, je désires changer (ralentir ou accélérer) la fréquence d'appel de cette fonction. Je n'ai pas trouvé de moyen de faire ceci.

    L'idée que j'avais était donc, lorsqu'il faut changer la fréquence de l'appel, de faire en sorte de que cette fonction appelée revoit FALSE (afin de détruire le timeout) puis d'en redéfinir un nouveau. Pensez-vous que la démarche algorithmique est la bonne ou auriez-vous d'autres solutions à me proposer ?

    D'avance merci pour toute aide sur ce point.

    Cordialement, Eric.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Sans trop y réfléchir ca me semble cohérent.

    Il existe plusieurs fonctions de la GLib pour manipuler les GSource mais je n'ai rien trouvé pour modifier en temps réel le timing !

  3. #3
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Sans trop y réfléchir ca me semble cohérent.
    Ok, merci pour cette réponse.

    L'idée est donc là, faire en sorte que cette fonction appelée revoit FALSE (afin de détruire le timeout) puis en redéfinir un nouveau.

    Cependant, je ne vois pas trop comment faire ceci. Supposons qu'il faille changer la fréquence de l'appel. Dans ce cas, il est facile en effet de faire en sorte que la fonction appelée revoit FALSE. En revanche, je ne vois pas comment (et surtout qui) peut alors redéfinir un nouveau timeout. Ca ne peut évidement pas être la fonction appelée (dans son dernier appel avec le précédent timeout), car le FALSE renvoyé ne va pas savoir lequel des deux timeout détruire..

    Tout idée est la bienvenue.

    Une autre idée (que je n'ai pas encore testée, mais qui me simplifierait bien la vie): Serait-il possible que l'utilisation d'un nouveau g_timeout_add() sur la même fonction simplement écrase la définition du précédent timeout ? Ca m'étonnerait que ça soit le cas, mais qui sait ?

    Dans tous les cas, merci pour votre temps, et merci d'avance pour toute aide sur ce point.

    Cordialement,

    Eric.

  4. #4
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Bon, je me réponds à moi-même. J'ai trouvé un post sur un forum anglo-saxon qui traite de ce problème, ici.

    La solution est tout bête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gint id;
    id = g_timeout_add (1000, do_something, NULL);
    g_source_remove (id);
    id = g_timeout_add (100, do_something, NULL);
    Je viens de faire des essais. Problème résolu !

    En espérant que ça serve à d'autres !

    Eric.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Solution simple, certes, mais pas toujours adaptée...
    Personnellement, j'utilise une autre solution dans metrognome, un petit métronome pour GNOME.
    https://github.com/liberforce/metrognome

    • J'appelle g_timeout_add une première fois.
    • Quand le temps est écoulé, ma callback est appelée.


    Dans la calback:
    • je calcule dans combien de temps je dois déclencher l'événement suivant
    • je refais un appel à g_timeout_add pour programmer l'événement suivant
    • je retire la source d'événement actuelle en renvoyant FALSE


    Je ne sais plus trop dans quel était est le code, j'y touche quand j'ai du temps, mais en gros cette méthode me permet de changer dans un GtkSpinButton le nombre de battements par minute du métronome sans avoir de changement abrupt (on attend la fin d'un intervalle de temps pour mettre à jour la valeur de l'intervalle suivant).
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2013, 09h26
  2. Réponses: 2
    Dernier message: 22/10/2009, 10h28
  3. changer la fréquence d'échantillonnage
    Par cedric06000 dans le forum Scilab
    Réponses: 7
    Dernier message: 17/08/2009, 16h24
  4. Réponses: 0
    Dernier message: 10/06/2009, 11h15
  5. Modifier la durée d'un sample sans changer la fréquence
    Par Sub0 dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 18/05/2007, 15h04

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