我試圖構建一個Toplevel窗口,它將顯示系統cmd的進度。我希望GUI處於活動狀態(沒有凍結和「無響應」),因此按下「取消」按鈕將終止進程,否則,完成後,激活「關閉」按鈕並禁用「取消」。在對我之前的一個問題提出建議後,我嘗試使用Proc :: Background。我發現做到這一點的唯一方法是:Perl TK與Proc ::背景正確使用(保持GUI活動?)
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秒的響應。 – Basil
似乎很好! – Mark