请问如何控制DBI连接mysql超时啊?

请问如何控制DBI连接mysql超时啊?

关于timeout官方只是说:

[Copy to clipboard] [ - ]
CODE:
  eval {
    local $SIG{ALRM} = sub { die "TIMEOUT\n" };
    alarm($seconds);
    ... code to execute with timeout here ...
    alarm(0);  # cancel alarm (if code ran fast)
  };
  alarm(0);    # cancel alarm (if eval failed)
  if ( $@ eq "TIMEOUT\n" ) { ... }

但是试过不起作用:

[Copy to clipboard] [ - ]
CODE:
use DBI;
eval {
    local $SIG{ALRM} = sub { die "TIMEOUT\n" };
    alarm(2);
    my $dbh = DBI->connect("DBI:mysql:$db_name:$db_server:$db_port",$db_user, $db_password);
    alarm(0);
};
alarm(0);
if ( $@ eq "TIMEOUT\n" ) { print "timeout\n"; }

结果还是等了十几秒才结束执行,且没有打印“timeout”。
有结果了,只是windows下的问题,在linux上没事情。

[Copy to clipboard] [ - ]
CODE:
eval {
    local $SIG{ALRM} = sub { die "TIMEOUT\n" };
    alarm(2);
    sleep(10);
    alarm(0);
};
alarm(0);
if ( $@ eq "TIMEOUT\n" ) { print "timeout\n"; }

这样在windows下是有效的,但在换成DBI连接数据库就不起作用了。

另外,

my $dbh = DBI->connect("DBI:mysql:...;mysql_connect_timeout=2"

加上 mysql_connect_timeout=2 也可以控制超时,但在 windows 就不生效。

有什么办法解决在 windows 下也能控制超时吗?
楼主都开始跑起来了,我是连爬都不会啊,我想请问一下,你是怎么在xp下安装DBD::mysql的啊,我怎么总是安装不上啊,非常感谢。。


QUOTE:
原帖由 huangruir 于 2008-3-5 20:16 发表
楼主都开始跑起来了,我是连爬都不会啊,我想请问一下,你是怎么在xp下安装DBD::mysql的啊,我怎么总是安装不上啊,非常感谢。。

我下载的是ppm包,很简单的:
http://theoryx5.uwinnipeg.ca/ppms/
国内也有:
http://perl.11138.net/?find=DBD%3A%3Amysql