Я пытаюсь использовать потоки в моем приложении perl/tk, чтобы он не замерзал при подключении к удаленному серверу mysql.используя потоки perl/tk, чтобы избежать зависания окна/не отвечает
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use DBD::mysql;
use Tk;
use threads;
use threads::shared;
our $type="mysql";
our $database="b_db";
our $host="mysite.com";
our $port="3306";
our $tablename="tc";
our $user="example";
our $pwd="********";
our $dsn="dbi:$type:$database:$host:$port";
my $thr=threads->create(\&con);
our $mw=new MainWindow;
$mw->Button(-text=>"Connect",-command=>\&con)->pack;
MainLoop;
sub con{
our $connect=DBI->connect($dsn,$user,$pwd)or die &mysql_Err;
print "done connecting\n" if $connect;
print "error\n" unless $connect;
}
$thr->detach;
но он все еще зависает, когда он пытается соединиться. Я пытался использовать тк/fileevent:
#!/usr/bin/perl
use DBI;
use DBD::mysql;
use Tk;
our $type="mysql";
our $database="b_db";
our $host="mysite.com";
our $port="3306";
our $tablename="tc";
our $user="example";
our $pwd="********";
our $dsn="dbi:$type:$database:$host:$port";
our $mw=new MainWindow;
$mw->Button(-text=>"Connect",-command=>\&con)->pack;
sub con{
our $connect=DBI->connect($dsn,$user,$pwd)or die &mysql_Err;
$mw->fileevent($connect, "readable", \&contquery);
}
sub contquery{
$query="SELECT * FROM products ORDER BY id";
$queryhandle=$connect->prepare($query);
$queryhandle->execute;
$queryhandle->bind_columns(undef, \$product_id, \$price, \$product_name, \product_type);
while($queryhandle->fetch()){
print <<print;
Product Name: $product_name | Type: $product_type | Prict: $price
print
}
}
MainLoop;
, но она по-прежнему замерзает. Может ли кто-нибудь посоветовать мне, что может быть причиной этого?
но он все еще зависает при подключении к удаленной БД, я просто сделал то, что вы сказали мне, я только что изменил, мой $ connect: shared – Muskovitz