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 :

Passage de paramètre à un Timer


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut Passage de paramètre à un Timer
    Bonjour, je souhaite toutes les x millisecondes dessiner un point dans un canevas gnome, jusque là pas de problème.

    Pour lui indiquer où dessiner, j'ai choisi de créer une structure que je passe en paramètre à chaque fonction ayant besoin d'accéder au canevas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Necessaire {
      GtkWidget* pCanvas;
      GnomeCanvasItem* pVoie1;
      GnomeCanvasItem* pVoie2;
    };
    Dans mon main je définis donc ma fenetre qui va pouvoir être passée en paramètre à chaque fonction, par exemple aux fonctions modif_amplitude et modif_frequence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char* argv[])
    {
      struct Necessaire *fenetre=NULL;
      fenetre = g_malloc(sizeof(struct Necessaire));
      ...
      fenetre->pCanvas = gnome_canvas_new_aa();
      ...
      g_signal_connect(G_OBJECT(bt1),"clicked",G_CALLBACK(modif_amplitude),(gpointer*)fenetre);
      g_signal_connect(G_OBJECT(bt2),"clicked",G_CALLBACK(modif_frequence),(gpointer*)fenetre);
    }

    Voici les fonctions :

    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
     
    static gint modif_amplitude(GtkWidget* widget, gpointer data){
     
      struct Necessaire *fenetre;
      fenetre = (struct Necessaire*)data;
     
      gtk_object_destroy(GTK_OBJECT(fenetre->pVoie1));
      gtk_object_destroy(GTK_OBJECT(fenetre->pVoie2));
     
      dessiner(fenetre,(double)(100.0*sin(j++/20.0)+200.0),5.0);
     
    return TRUE;
    }
     
     
    static gint modif_frequence(GtkWidget* widget, gpointer data){
     
      struct Necessaire *fenetre;
      fenetre = (struct Necessaire*)data;
     
      g_timeout_add(temps,(gpointer)modif_amplitude,(gpointer*)fenetre);
     
    return 0;
    }

    Et voilà le problème : lorsque je clique sur bouton1 pas de problème la fonction modif_amplitude recoit bien le paramètre et sait où supprimer et redessiner. Par contre pour le g_timeout_add , je n'arrive pas à passer la fenetre en paramètre et le programme plante instantanèment :s

    Merci à vous d'avoir lu jusque là.

  2. #2
    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,

    Tout simplement parce que le prototype de la fonction n'est pas correct : GSourceFunc

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Par défaut Timer
    Bonjour,
    Je pense que le cast GSourceFunc serait à utiliser à la place de gpointer pour la fonction à activer dans g_timeout_add.
    Cordialement

  4. #4
    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
    Citation Envoyé par KiKiTiTi Voir le message
    Je pense que le cast GSourceFunc serait à utiliser à la place de gpointer pour la fonction à activer dans g_timeout_add.
    Non, caster un pointeur de fonction n'est pas une bonne idée[1]. A part masquer le problème au niveau du compilateur ça ne réglera rien.

    ---
    [1] Oui pour les fonctions callback le cast est souvent obligatoire, mais ce n'est pas un cast brutal, il faut utiliser une macro pour ça.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    Ah d'accord lol merci beaucoup

    Je ne savais jamais quel prototype de fonction mettre pour tel ou tel usage, en fait tout se trouve dans les fichiers .h !

    Merci à vous deux pour votre réponse rapide

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

Discussions similaires

  1. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58
  2. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  3. [XSL] Passage de paramètres à un template
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2003, 13h28
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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