Re: Glib::IO->add_watch - file descriptor got locked till the end of all incoming data
- From: muppet <scott asofyet org>
- To: anguila <anguila gmail com>
- Cc: "gtk-perl-list gnome org List" <gtk-perl-list gnome org>
- Subject: Re: Glib::IO->add_watch - file descriptor got locked till the end of all incoming data
- Date: Sun, 2 Aug 2009 13:34:36 -0400
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.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]