1

我正在创建一个 Perl/TK GUI 代码,它将在内部调用一个单独的 exe。进度条小部件将是它内部正在执行的唯一指示,但问题是,当您运行代码时,进度条会冻结,因为它必须首先完成单独 exe 的执行,完成后,进度活动可以更新。

有没有更好的方法可以同时实现单独的 exe 的进度,以便实时执行代码?

4

3 回答 3

4

你如何调用外部程序?如果您正在阻止类似 的内容system(),请不要这样做。在单独的进程中运行程序,然后轮询以检查它是否正在运行。只要它正在运行,您就会更新进度指示器。

于 2009-08-12T10:56:21.540 回答
2

您是否从其他流程中获得进度输出?如果是这样,您可以使用它open()来运行您的子进程。

open(MYSUBPROC, '-|', "myprocess args") or die "could not execute!";
while (<MYSUBPROC>)
{
    #do something...
}
close(MYSUBPROC) || warn "subproc returned error $?";

您还应该查看有关使用IPC的perlipc部分,并打开安全管道open()

于 2009-08-12T11:12:13.410 回答
1

我没有足够的 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: $?";
于 2009-08-12T11:15:34.183 回答