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:
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:
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:
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à.