我正在创建一个 Perl/TK GUI 代码,它将在内部调用一个单独的 exe。进度条小部件将是它内部正在执行的唯一指示,但问题是,当您运行代码时,进度条会冻结,因为它必须首先完成单独 exe 的执行,完成后,进度活动可以更新。
有没有更好的方法可以同时实现单独的 exe 的进度,以便实时执行代码?
你如何调用外部程序?如果您正在阻止类似 的内容system()
,请不要这样做。在单独的进程中运行程序,然后轮询以检查它是否正在运行。只要它正在运行,您就会更新进度指示器。
我没有足够的 Perl/Tk 知识来快速举个例子。
工人.pl
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
for (0 .. 10) {
print 10 * $_, "\n";
sleep 1;
}
老板.pl
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
open my $worker_h, '-|', 'worker.pl'
or die "Cannot open pipe to worker: $!";
while ( my $status = <$worker_h> ) {
chomp $status;
my $ticks = 2 * ($status/10);
print '=' x $ticks, "\r" x $ticks;
# do other stuff;
}
close $worker_h
or die "Error closing pipe to worker: $?";