Thread threads::shared und Pipes per IO::Handle (3 answers)
Opened by Mips at 2007-06-04 18:02

Mips
 2007-06-04 18:02
#77228 #77228
User since
2007-06-04
3 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

ich habe ein Problem. Mein Hauptprogramm startet eine thread, welcher Werte über eine Pipe zurückliefern soll. Da IO::Pipe Objected nicht "geshared" werden koennen, habe ich das Problem versucht zu umgehen. Hier mal ein Beispiel code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl 


use Tk;
use threads;
use threads::shared;
use IO::Pipe;
use IO::Handle;

$|=1;
my $news = 0;
share($news);

my $pipe = IO::Handle->new();

my $thread = threads->create(\&t,$pipe);

$pipe->fdopen($pipeFileno,'r');

my $win = MainWindow->new();
$lb = $win->Listbox()->pack();
$win->repeat(100,sub{ update($pipe,$lb)});
MainLoop;

sub t{
$pipe->fdopen($pipeFileno,'w');
while(1) {
print time()."\n";
print $pipe "a\n";
$news=1;
sleep(2);
}
}

sub update {
my ($pipe,$lb)=@_;
# $pipe->fdopen($pipeFileno,'r');
if($news){
print "update\n";
my $tmp=<$pipe>;
chomp($tmp);
print "insert: $tmp\n";
$lb->insert('end',$tmp);
$news=0;
}
}


hierbei soll nur immer eine neue Option in die Listbox eingefüht werden. Zwar wird bei mir auch immer eine neue, aber leere Option eingefügt. Anscheinend kommt nichts aus der Pipe heraus ....

Ich kann mir das Phenomen nicht erklären, hat einer von euch Tipps, wie man so etwas löst?

danke für jegliche Tips

bye,
Mips

P.S.: test System: linux mit perl, v5.8.8 built for i486-linux-gnu-thread-multi

View full thread threads::shared und Pipes per IO::Handle