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 :

changer la valeur de l'intervalle d'un timeout?


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut changer la valeur de l'intervalle d'un timeout?
    Bonjour,
    J'aimerais savoir s'il est possible de changer la valeur de l'intervalle d'appel d'une fonction timeout ?
    C'est-à-dire qu'à un moment je voudrais pouvoir appeler ma fonction à des intervalles plus courts ou plus long.
    Cela ne marche pas lorsque je change la valeur une fois dans la fonction (valeur stockée dans une structure).

    Merci pour vos réponses !

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Je n'ai rien trouvé de probant dans la documentation. L'utilisation de g_timeout_add(); fait partie d'un groupe de fonctions associé aux GSource. Regarde toujours de ce côté là, ma vue n'est peut être pas assez affûtée.

    Une solution serait dans le CALLBACK de lancer à nouveau ce même CALLBACK avec un timing différent et de renvoyer FALSE ensuite, histoire de terminer l'ancien appel.

  3. #3
    Membre Expert
    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
    Par défaut
    Oui, à mon avis tu ne trouveras pas de méthode plus directe que celle proposée par Gerald. Une autre façon de faire est d'utiliser g_source_remove pour désactiver le g_timeout_add et d'en relancer un autre, mais c'est équivalent à ce que dit Gerald.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 36
    Par défaut
    J'ai pas testé, mais je me demande : c'est vraiment possible de lancer un autre timeout après l'arret du précédent ? Puisque logiquement quand le programme s'execute on est déjà dans le gtk_main, donc je suis pas sûr qu'on puisse lancer un autre timeout. Normalement il faudrait déjà le lancer avant ? ça pourrait créer des conflits ?
    Sinon je pense pas avoir compris exactement ce que tu dis gerald, c'est de lancer un timeout de la même fonction dans la fonction elle même ?

    Merci pour vos réponses.

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Oui. Relancer le même CALLBACK depuis lui-même. Maintenant je t'avoue humblement n'avoir jamais essayé. C'est l'occasion de faire le test peut être

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut
    Salut, il y a (sans doute) un autre possibilite. Utiliser le thread. Dans chaque thread il y a soit sleep ( soit usleep ) dont valuer tu peut changer Petit example ...

    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
     
    P_thread_create ( ...., mon_thread, ... );
     
    void mon_thread ( ... )
    {
      bool lancer_moi_de_nouveau = true;
      uint dormir = 1000000;
     
      while ( lancer_moi_de_nouveau )
      {
         Ta_Fonction ();
         /*
        des conditions pour changement de lancer_moi_de_nouveau et dormir
        */
         usleep ( dormir );
      }
    }
    Fredy

    ( je suis desole pour ma langue francaise :-) )

  7. #7
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Qu'elle est la cause du changement d'intervalle ?

    S'il s'agit d'une glissière (ou autre widget), dans la fonction de rappel, je commencerai pas supprimer l'ancien callback avec g_source_remove puis le recréer.

  8. #8
    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
    Par défaut
    Aucune raison d'utiliser des threads pour quelque chose d'aussi basique...
    Comme le dit tout le monde, la bonne technique est soit de renvoyer FALSE (plus simple), soit d'utiliser g_source_remove, et lancer un nouveau timeout...

Discussions similaires

  1. [javascript] Changer la valeur de onclick()
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/12/2005, 10h29
  2. [formulaire] changer une valeur affichée
    Par soad dans le forum Access
    Réponses: 8
    Dernier message: 11/10/2005, 18h59
  3. impossible de changer la valeur d'un hidden...
    Par Palmic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2005, 12h06
  4. Changer la valeur sélectionnée d'un <select> en javasc
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/02/2005, 15h53
  5. Changer la valeur de la MTU sur un LAN
    Par nin2 dans le forum Réseau
    Réponses: 3
    Dernier message: 19/02/2005, 15h47

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