システム コマンドの進行状況を表示するトップレベル ウィンドウを構築しようとしています。GUIをアクティブにしたいので(フリーズして「応答しない」ことはありません)、「キャンセル」ボタンを押すとプロセスが強制終了されます。それ以外の場合は、終了時に「閉じる」ボタンをアクティブにして「キャンセル」を無効にします。以前の質問の 1 つに対する提案に従って、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秒待たずに)?
ありがとう、マーク。