关于gtk和qt的疑惑,希望朋友们帮忙解答一下

代码:
#!/bin/env perl

use strict;
use warnings;
use threads;
use Gtk2;
use Glib qw(TRUE FALSE);
$|++;
my $str = 'test';
Gtk2::Gdk::Threads->init();
Gtk2->init();
my $window= Gtk2::Window->new("toplevel");
$window->signal_connect(delete_event => sub { Gtk2->main_quit(); });
$window->set_border_width(10);
my $button = Gtk2::Button->new_with_label("Hello World");
$button->signal_connect(clicked => \&new_thread);
$window->add($button);
$window->show_all();

Gtk2::Gdk::Threads->enter();
Gtk2->main();
Gtk2::Gdk::Threads->leave();

##############################################

sub hello()
{
        print "sad:$str\n";
}

sub new_thread()
{
        hello();
        my $t = threads->create(\&test);
        $t->detach();
}

sub test()
{
#                Gtk2::Gdk::Threads->enter();
                print "weigun\n";
#                Gtk2::Gdk::Threads->leave();
}


下面这两句,无论注释与否都不行····
# Gtk2::Gdk::Threads->enter();
# Gtk2::Gdk::Threads->leave();
那个按钮按了第二次就出错了···一大堆错误·····程序的输出信息如下:

sad:test
weigun
sad:test
weigun
GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-WARNING **: instance of invalid non-instantiatable type `<invalid>' at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_signal_emit_valist: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-WARNING **: instance of invalid non-instantiatable type `<invalid>' at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-WARNING **: instance of invalid non-instantiatable type `<invalid>' at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
Usage: Glib::Object:ESTROY(sv) at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-WARNING **: instance with invalid (NULL) class pointer at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-WARNING **: instance with invalid (NULL) class pointer at D:\test-area\gtk_test\gtk_threads.pl line 23.
GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed at D:\test-area\gtk_test\gtk_threads.pl line 23.

============================================
一头雾水···所以··求高手解释····谢谢··

作者: wfnh   发布时间: 2010-07-30

定一个·

作者: wfnh   发布时间: 2010-07-30

闻到死底下的?
谁知道可靠不可靠阿?
Gtk的貌似都会产生很多Warning

作者: tusooa   发布时间: 2010-08-05