On Aug 2, 2009, at 3:03 AM, anguila wrote:
I want to update a treeview and this is the reason why i'm using the
add_watch function. The child is sending data all the time for many
reasons and the problem that i have is the file handler which have
the incoming data from child to parent. With watcher each time the
child sent data the $line = <$reader> must save this data in $line
and call the function.
But dont know why the <$reader> just get locked till the end of
all $writer>write() and then it save all those data into $line, and
i dont want that, i want to save the data of ->write in $line each
time child send data.
Any idea?
$watcher{$pid} = Glib::IO->add_watch($reader->fileno(),
['in', 'hup'], sub {
my ($fileno, $condition) = @_;
print "->cond = $condition\n";
if ($condition & 'in') {
print "->reading from parent!!!\n";
$line = <$reader>;
Don't mix and match buffered reads and an unbuffered event watcher.
The <> operator will read until end of line, but the watch is based on
select(), and fires when any data is available on the file
descriptor. The end of line may not have arrived yet, and the <> will
block until the end of line does arrive.
You want to use sysread() here. This may involve keeping a partial
string checking to see if it contains an entire line.
--
Teeter tots are shaped like marshmallows.
-- Zella.
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-perl-list