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 :

modifier le temps dans timeout


Sujet :

GTK+

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut modifier le temps dans timeout
    Bonjour,

    ds mon main, j'ai un bouton qui permet de déclencher un chrono avec g_timeout_add(...).
    Est-ce possible de changer le pas de temps de cette méthode lors de son utilisation?

    ex : j'ai g_timeout_add(1000,...) et je voudrai mettre g_timeout_add(3000,...)???

  2. #2
    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
    Bin sûr, tu peux modifier la durée. En revanche, dès que tu atteins un temps supérieur ou égal à la seconde, il vaut mieux utiliser g_timeout_add_seconds qui permet d'améliorer la gestion de l'énergie (regroupe les réveils des timers, permet au processeur de passer dans les état de sommeil afin de réduire sa consommation).
    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)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Quand j'utilise g_timeout_add_seconds, ilme dit : undefined reference to g_timeout_add_seconds.

    Comment tu fais alors pour modifier la durée au cours du temps parce que j'ai essayé avec gtk_spiin_buton_get_value, mais ca ne marche pas!!!

  4. #4
    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
    De ce que je comprends, tu as une fonction callback qui est appelée toutes les N millisecondes après un g_timeout_add, et tu aimerais qu'elle soit appelées toutes les M millisecondes plutôt. Si tu es dans le callback, tu peux tout simplement faire un g_timeout_add avec la nouvelle valeur et renvoyer FALSE de ton callback pour qu'il ne soit plus rappelé avec l'ancienne fréquence.

  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
    Citation Envoyé par mdrhaha Voir le message
    Quand j'utilise g_timeout_add_seconds, ilme dit : undefined reference to g_timeout_add_seconds.
    Lis la doc de g_timeout_add_seconds: Since 2.14. Donc si tu as une version plus ancienne de la GLib, forcément, ce ne sera pas disponible. Mais en même temps, la GLib actuelle est la 2.24, la 2.14 est donc disponible depuis tout de même 2 ans 1/2...
    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)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    j'ai essayé, mais ca ne marche pas, mon programme bloc!!!

  7. #7
    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
    Ecoute, mets du code, parce que là il faut deviner à l'aveuglette ce que tu essaies de faire... Qu'est-ce que tu entends pas "il bloque", et qu'est ce que tu as essayé ? Ce que teuf t'a dit ou ce que je t'ai dit ?
    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)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    ok, c vrai que ca va etre plus simple avec un code, ce que j'avais essayé c'étais la technique de teuf...

    donc, ce que je fais c je crée un bouton dans le main qui m'envoi a une fonction qui contient g_timeout_add() dont le callback de celui-ci appel une autre fonction.

    Voici, le code dans ces grandes lignes :
    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
     
    int main (int argc, char **argv)
    {
     
    ...
     
    bouton = gtk_button_new_with_label("play");
        gtk_box_pack_start(GTK_BOX(Hbox), bouton, TRUE, TRUE, 0);
     
    ...
     
    g_signal_connect(G_OBJECT(bouton), "clicked", G_CALLBACK(debut), (gpointer)data);
     
    }
     
    dans debut :
     
    int debut(GtkWidget *widget, gpointer user_data)
    {
     
    ...
     
    TPS = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(Temps));
     
        g_timeout_add(TPS, (GSourceFunc)Callback, (gpointer)data);
     
        return 0;
    }
    j'ai un parametre TPS qui représente la valeur d'un spinbutton, à l'état initial quand je met N millisecondes, le programme tourne à N millisecondes que j'observe en affichant l'évolution du temps en fonction de N.

    Au cours du programme je change la valeur de N par M et je voudrai que mon programme évolue à M millisecondes, mais ce n'est pas le cas?

  9. #9
    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
    A quoi correspond data?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    C'est une structure qui contient des données gérant le comptage du chronomètre me permettant d'observer le changement de N à M à l'écran.

  11. #11
    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
    Tout le problème se trouve dans CALLBACK. Montre-nous ce code STP.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    ouais dsl de mon retard!!!

    voila le callback :
    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
     
    gboolean Callback_Timeout(gpointer user_data)
    {
    //    GlobalData *data=NULL;
     clock_t start, end;
        gdouble elapsed;
     
        start = clock();
     
        data = (GlobalData*) user_data;
     
     
        g_signal_connect(G_OBJECT(data->area), "expose-event", G_CALLBACK(Horloge), (gpointer)data);
     
     
        end = clock();                                    /* Arret de la mesure     */
        elapsed = ((double)end - start) / CLOCKS_PER_SEC; /* Conversion en seconde  */
     
     
        if(elapsed > data->TPS/1000)
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->Vitesse), 1000*ceil(elapsed));
     
    	return data->appui;
    }
    et voila la fonction Horloge :

    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
     
    int Horloge(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
    {
        data = (GlobalData*) user_data;
        gchar temps[32];
     
        time_t tA=0;
     
         tA=time(NULL);
     
     
         data->tps=tA-data->temps;
         data->jour =data->tps/(24*60*60);
         data->tps-= data->jour*24*60*60;
         data->heure= data->tps/(60*60);
         data->tps-=data->heure*60*60;
         data->min =data->tps/60;
         data->tps-=data->min*60;
     
         sprintf(temps,"%d h %d min %d sec", data->heure, data->min, data->tps);
         gdk_draw_string (data->area->window, data->police, data->area->style->black_gc, data->largeur - 150, 75, temps);
     
     
     
         return 0;
    }

  13. #13
    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
    Je ne vois pas l'endroit où tu essaies de changer la fréquence d'appel du callback ajouté via g_timeout_add

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    c a cette endroit :

    if(elapsed > data->TPS/1000)
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->Temps), 1000*ceil(elapsed));

  15. #15
    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
    Ca va changer la valeur affichée à l'écran ça... Il va aussi falloir refaire un g_timeout_add avec le nouvel intervalle, et faire en sorte que le callback à l'ancienne fréquence ne s'éxécute plus.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    justement c ce que je veux faire et que je n'arrive pas malheureusement!!!
    si il y a qq1 qui connait comment faire?

  17. #17
    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
    Ecoute, je t'ai expliqué et , visiblement mes explications ne sont pas suffisantes, mais si tu ne poses pas de questions pour que je puisse expliquer mieux, je ne vais pas pouvoir plus t'aider.

Discussions similaires

  1. Comment faire pour modifier une ligne dans une DBGrid?
    Par Nico62 dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2005, 12h24
  2. Modifier l'utilisateur dans une PS ?
    Par Sitting Bull dans le forum SQL
    Réponses: 7
    Dernier message: 28/02/2005, 18h01
  3. modifier les texte dans un <span>
    Par Flobel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/12/2004, 13h58
  4. [C#] Faire un INSERT en même temps dans 2 bases differentes
    Par Pingva dans le forum Accès aux données
    Réponses: 8
    Dernier message: 09/09/2004, 12h07
  5. Modifier un événement dans le code
    Par HT dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2003, 09h46

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