Hi all,

Just wanted to know if what I'm doing makes sense.

I'm trying to poll for a child process being finished in a way that
will not freeze the GUI up, but also won't let the surrounding code
continue until the child process is finished.

Assuming $kid is the process id of the child, is the following code
reasonable or am I missing something basic:

use POSIX qw/WNOHANG/;
require Glib;
#...
while (1) {
  last if waitpid($kid, WNOHANG); # Check if we're done
  my $ml = Glib::MainLoop->new;
  Glib::Timeout->add(2000, sub { $ml->quit; return 0 });
  $ml->run;
}

If this makes sense, I'm thinking of writing a helper function along
the lines of:

sub wait_complete {
  my ($checksub, $period, $maxwait) = @_;
  my $time = time;
  my $completed = 0;
  while (1) {
    return 1 if $checksub->(); # Completed
    return 0 if defined($maxwait) and (time - $time >= $maxwait); # Timeout
    my $ml = Glib::MainLoop->new;
    Glib::Timeout->add($period, sub { $ml->quit; return 0 });
    $ml->run;
  }
}

MB
_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to