Meine GTK+ Fragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
schorsch_76
Beiträge: 2612
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Meine GTK+ Fragen

Beitrag von schorsch_76 » 30.01.2009 22:57:45

Ok .. Ein eindeutiges Jein :-D

Aber dort wo es durchlaufen wird, muss ein free() rein ;)

Gruß

schorsch

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Meine GTK+ Fragen

Beitrag von Danielx » 30.01.2009 23:10:29

Kanalratte hat geschrieben:wenn ich den Button Start/Stop zum 2ten mal drücke, krieg ich 'nen Speicherzugriffsfehler....
Beim Reset-Knopf bekomme ich auch einen Speicherzugriffsfehler. ;-)

Gruß,
Daniel

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Meine GTK+ Fragen

Beitrag von Spasswolf » 30.01.2009 23:24:38

Den Reset Knopf kann man auch weglassen. Der soll die Funktion g_timer_reset aufrufen, die glib Dokumentation [1] sagt folgendes zu der Funktion:
This function is useless; it's fine to call g_timer_start() on an already-started timer to reset the start time, so g_timer_reset() serves no purpose.

[1] http://library.gnome.org/devel/glib/sta ... imer-reset

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Meine GTK+ Fragen

Beitrag von Danielx » 30.01.2009 23:33:22

Hm, mit g_timer_start bekomme ich auch einen Speicherzugriffsfehler:

Code: Alles auswählen

gtk_signal_connect(GTK_OBJECT(reset), "clicked", GTK_SIGNAL_FUNC(g_timer_start), timer);
So funktioniert es aber:

Code: Alles auswählen

    int resettime(){
        g_timer_start(timer);
      }

(...)

  gtk_signal_connect(GTK_OBJECT(reset), "clicked", GTK_SIGNAL_FUNC(resettime), NULL);
Woran liegt das?

Gruß,
Daniel

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Meine GTK+ Fragen

Beitrag von Spasswolf » 31.01.2009 19:56:36

Der Wurm steckt irgendwo in den tiefen der glib:
(gdb) backtrace
#0 0x00007f3c95791264 in g_object_unref () from /usr/lib/libgobject-2.0.so.0
#1 0x00007f3c957b2ed3 in g_value_unset () from /usr/lib/libgobject-2.0.so.0
#2 0x00007f3c957a7615 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#3 0x00007f3c957a7b13 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#4 0x00007f3c967e9dcd in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#5 0x00007f3c9578f28f in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#6 0x00007f3c957a581d in ?? () from /usr/lib/libgobject-2.0.so.0
#7 0x00007f3c957a75e8 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#8 0x00007f3c957a7b13 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#9 0x00007f3c967e8f6d in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#10 0x00007f3c968b6308 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#11 0x00007f3c9578f28f in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#12 0x00007f3c957a5bd3 in ?? () from /usr/lib/libgobject-2.0.so.0
#13 0x00007f3c957a7497 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#14 0x00007f3c957a7b13 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#15 0x00007f3c969ca50e in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#16 0x00007f3c968aeea3 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#17 0x00007f3c968afeeb in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#18 0x00007f3c9651637c in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#19 0x00007f3c952d396a in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#20 0x00007f3c952d711d in ?? () from /usr/lib/libglib-2.0.so.0
#21 0x00007f3c952d764d in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#22 0x00007f3c968b0307 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#23 0x0000000000401562 in main (argc=1, argv=0x7fff9ef44108) at test.c:68
(gdb)
So soll man die Sachen benutzen:
http://library.gnome.org/devel/gtk-tuto ... /x159.html

@Kanalratte Welches Tutorial benutzt du eigentlich? Es sieht zum Teil so aus, als wäre das noch für gtk-1.2 gedacht (z.B. soll man statt gtk_signal_connect g_signal_connect benutzen)
Das gtk-2.0 Tutorial hat geschrieben:In version 2.0, the signal system has been moved from GTK to GLib, therefore the functions and types explained in this section have a "g_" prefix rather than a "gtk_" prefix. We won't go into details about the extensions which the GLib 2.0 signal system has relative to the GTK 1.2 signal system.

Antworten