我正在尝试构建一个显示系统 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 秒响应)?
谢谢,马克。