xcb在Perl / Gtk2中处理队列时的序列号未知

时间:2015-01-08 16:18:20

标签: multithreading perl

我花了一个小时才发现我制作的这个小程序的错误,但每当我点击提交按钮时,程序立即结束,在那个时候我不知道我的代码是什么错,直到我看到这个错误消息。

[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
perl: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed. Aborted

这是我的程序代码:

#!/usr/bin/perl
use Gtk2 '-init -threads-init';
use Glib qw/TRUE FALSE/;
use threads;
use threads::shared;
use DBI;
use DBD::mysql;

Glib::Object->set_threadsafe (1);

our $type="mysql";
our $database="usr";
our $host="http://www.examplesite.com";
our $port="3306";
our $tablename="username_list";
our $user="username";
our $pwd="***********";

our $dsn="dbi:$type:$database:$host:$port";
our $query;
our $queryhandle;
my $str:shared=0;

my $window=Gtk2::Window->new;
$window->signal_connect('delete_event',sub{Gtk2->main_quit;});
$window->set_title("Perl Gtk2 Tutorial");

my $vbox=Gtk2::VBox->new;
my $label=Gtk2::Label->new("Username: ");
my $button=Gtk2::Button->new("Submit");
my $entry=Gtk2::Entry->new();
$button->signal_connect(clicked=>sub{
    $str=$entry->get_text;
    my $thr=threads->create(\&check_exist);
});
$vbox->add($label);
$vbox->add($entry);
$vbox->add($button);
$window->add($vbox);
$window->show_all;
Gtk2->main;
sub check_exist{
    our $connect=DBI->connect($dsn,$user,$pwd);
    $query="SELECT * FROM username_list ORDER BY id DESC";
    $queryhandle=$connect->prepare($query);
    $queryhandle->execute;
    $queryhandle->bind_columns(undef, \my $username);
    while ($queryhandle->fetch()) {
        if("$str" eq "$username"){
            $label->set_text("Username already exist");
        }else{
            &start_thread2; 
        }
    }   
}
sub start_thread2{
    my $thr2=threads->create(\&proceed);
    sub proceed{
        my $mw=Gtk2::Window->new;
        $mw->signal_connect('delete_event', sub{Gtk2::main_quit});
        my $label=Gtk2::Label->new("Hey $str how are you?");
        $mw->add($label);
        $mw->show_all;
    }
}

提前致谢

0 个答案:

没有答案