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

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : décembre 2012
    Messages : 143
    Points : 68
    Points
    68

    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
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : février 2008
    Messages : 1 920
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    3

    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 !
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

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

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : décembre 2012
    Messages : 143
    Points : 68
    Points
    68

    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 du Club
    Homme Profil pro
    chercheur
    Inscrit en
    décembre 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : décembre 2012
    Messages : 143
    Points : 68
    Points
    68

    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
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 220
    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 220
    Points : 1 808
    Points
    1 808

    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).

+ 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