1

内部で別のexeを呼び出すPerl/TK GUIコードを作成しています。進行状況バー ウィジェットは、内部で実行が行われていることを示す唯一の指標になりますが、問題は、コードを実行すると、最初に別の 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 を知りません。

worker.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 に答える