Und wieder ich ;)
Ich benutze momentan POE für ein ziemlich vielseitiges Server
Programm. Und da dieses viele Dinge (nicht nur Client annehmen
und irgendwas zurückschicken, sondern z.B. von einem serielen
Port Daten holen, alle paar Minuten ein paar verzeichnisse aus-
lesen und und und) erledigen muss, die nicht gleichzeitig laufen
können, habe ich mir gedacht, mache ich eine JobQueue-Session.
So die Sessioninititierung:
# Jobprocessor
POE::Session->create( inline_states => {
_start => \&init_processor,
_stop => \&clean_processor,
iter => \&iter_processor,
addjob => \&add_job });
So die Subs:
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
sub init_processor {
my ($kernel, $heap) = @_[ KERNEL, HEAP ];
$poe_kernel->alias_set( 'prc' );
$heap->{'JobList'} = [];
$kernel->yield('iter');
}
sub clean_processor {
my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
delete $heap->{'JobList'};
}
sub iter_processor {
my ($kernel, $heap) = @_[ KERNEL, HEAP ];
my $Job = shift @{$heap->{'JobList'}};
print &{$Job->{'Sub'}}(@{$Job->{'Args'}}); # print $Job->{'Sub'}; ergibt CODE(0x1234567)
$kernel->yield('iter') if (scalar @{$heap->{'JobList'}});
}
sub add_job {
my ($kernel, $heap, @arg) = @_[ KERNEL, HEAP, ARG0 .. ARG9 ];
push @{$heap->{'JobList'}}, { Name => $arg[0],
Sub => $arg[1],
Args => $arg[2] };
$kernel->yield('iter');
}
Aufruf:
$_[KERNEL]->post('prc','addjob','CheckInbox',\&CheckInbox,[$SerialHandle]);
Geht nicht, kommt sich Fehler:
QuoteTk::Error: Undefined subroutine &main:: called at server.gpl line 195, <DATA> line 164.
Tk::After::once at G:/perl/site/lib/Tk/After.pm line 83
[once,[{},undef,100,once,[\&POE::Kernel::_poll_for_io]]]
("after" script)
Wie bekomm ich das dann hin? Bzw. wieso kennt er auf einmal
die Subroutine nicht mehr?\n\n
<!--EDIT|eisbeer|1093181281-->
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...