Leser: 2
4 Einträge, 1 Seite |
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 47 48
use Win32::Pipe; while ($q < ($einstellungen_para_wert[12] * $einstellungen_para_wert[13])){ $pid = fork() ; unless (defined $pid) { die "Could not fork $!"; } #--------------------------------------------------------------------------- # Hier beginnt der Child-Prozess #--------------------------------------------------------------------------- elsif ($pid < 0){ print "bin ein Childprozess\n", $Pipe = new Win32::Pipe("My Pipe Name $q") or die "sorry, i cannot creat a pipe"; print "Pipe wurde erfolgreich erschaffen"; $Result = $Pipe->Connect() or die "sorry, i cannot connect to the pipe"; $Result = $Pipe->Write("Howdy! This is cool!") or die "sorry, i cannot write in the pipe"; $Pipe->Disconnect() or die "sorry, i cannot disconnect to the pipe"; #Hier läuft das Programm mittels dem [i]system()[/i] Befehl $Result = $Pipe->Connect(); $Result = $Pipe->Write("Now i´m ready!"); $Pipe->Disconnect(); exit(0); } #--------------------------------------------------------------------------- # Hier beginnt der Parent-Prozess #--------------------------------------------------------------------------- else{ while ($k1 == $einstellungen_para_wert[12] ){ for ($op = ($q - ($k1 - 1)); $op < ($q ); $op++){ $Pipe = new Win32::Pipe("\\\\server\\pipe\\My Pipe Name $op") or die "sorry, i cannot find the pipe: My Pipe Name $op"; #line 482 $Result = $Pipe->Connect(); $Data = $Pipe->Read(); $Pipe->Disconnect(); if ($Data eq "Now i´m ready!"){ $k1--; $Data->Close(); wait; } } Win32::Sleep 100; #Programm pausiert 0,1 Sek. sonst beansprucht Perl die frei werdenen Ressourcen. } $k1++; $q++; } }
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
use 5.010; use strict; use warnings; use Symbol qw/gensym/; sub spawn_worker(&) { my ($thunk) = @_; my $pipe = gensym; my $pid = open $pipe, '-|'; die "Unable to create worker: $!" unless (defined($pid)); if ($pid == 0) { $thunk->($pipe); exit 0; } else { return ($pid, $pipe); } } sub collect_work($*) { my ($pid, $pipe) = @_; my $_; print "$pid >> $_" while (<$pipe>); die "Unable to read from worker $pid: $!" if ($!); close $pipe or die "Unable to close worker $pid: $!"; } my %workers = (); for my $idx (0..10) { my ($pid, $pipe) = spawn_worker { print "Hello, I'm worker $idx\n"; }; $workers{$pid} = $pipe; } while (my ($pid, $pipe) = each %workers) { collect_work $pid, $pipe; }
Taulmarill+2008-10-07 17:07:24--Hm, evtl. habe ich nur irgend etwas an deinem Script nicht verstanden, aber für mich sieht es so aus, als ob du eine Pipe mit dem Namen "My Pipe Name $q" erzeugst und dann versuchst nach "My Pipe Name $op" zu verbinden. Dabei ist aber nicht sicher gestellt, dass $q == $op ist. So wie das ganze aussieht bin ich mir sogar ziemlich sicher, dass $q != $op. Da das Programm nach dem ersten fehlgeschlagenen Versuch sofort mit die beendet wird, kommt es nie zu einer Verbindung.
$Pipe = new Win32::Pipe("\\\\server\\pipe\\My Pipe Name $op")
$Pipe = new Win32::Pipe("\\\\.\\pipe\\My Pipe Name $op")
4 Einträge, 1 Seite |