【发布时间】:2012-10-18 00:04:46
【问题描述】:
我正在尝试构建一个显示系统 cmd 进度的顶级窗口。我希望 GUI 处于活动状态(没有冻结和“无响应”),因此按下“取消”按钮将终止进程,否则,完成后,激活“关闭”按钮并禁用“取消”。根据对我之前的一个问题的建议,我尝试使用 Proc::Background。我发现这样做的唯一方法是:
my $proc1;
my $cancel = $toplevel->Button(-text => "Cancel", -command =>sub{$proc1->die;})->pack;
my $close = $toplevel->Button(-text => "Close", -command =>sub{destroy $toplevel;}, -state=>"disabled")->pack;
$proc1 = Proc::Background->new("x264.exe $args");
while ($proc1->alive == 1){
$mw->update();
sleep(1);
}
$cancel->configure(-state=>'disabled');
$close->configure(-state=>'normal');
还有其他更有效的方法吗(无需等待 1 秒的响应)?
谢谢, 标记。
【问题讨论】:
-
你可以写
select(undef,undef,undef,0.2);来等待0.2秒的响应。