Thread Threads und shared Data: Referenzen auf ein Objekt sharen (5 answers)
Opened by drsoran at 2005-04-05 16:36

drsoran
 2005-04-05 16:36
#53326 #53326
User since
2005-04-05
2 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich habe folgendes Programm:

/// Server.pl ////
Code: (dl )
1
2
3
4
5
#! perl -w
use strict;
use ServerController;

my $sc = ServerController->new(); #Referenz auf Objekt


/// ServerController.pm ///
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
package ServerController;

use strict;
use IO::Socket;
use threads;
use threads::shared

sub new
{
   my $proto = shift;
   my $class = ref($proto) || $proto;
   my $self  = {};
   bless ($self, $class);
   $self->{LISTENSOCKET} = IO::Socket::INET->new(...);
   $self->{CLIENTS} = [];
   $self->{THREAD} = threads->new("listen", $self);
   return $self;
}

sub listen{
   my $self = shift;
   while(1){
         my $client = $self->{LISTENSOCKET}->accept();
         push @{$self->{CLIENTS}}, $client;
   }
}

1;

// ENDE ServerController.pm //

PROBLEM: Wenn ich den Thread in ServerController.pm erzeuge bekommt er als Parameter eine Referenz auf die Instanz von ServerController. Aber da die Daten in Threads ja private sind erzeugt der Thread seinen eigenen ServerController und die neuen Clients kommen in dessen Array.

Wenn ich jetzt die Clients aus der Server.pl benutzen möchte sind keine vorhanden, da die Referenz auf die erste Instanz von ServerController zeigt.

Kann ich $self im Konstruktor von ServerController sharen, so dass der Thread mit der alten Referenz arbeitet?

Hat bei mir nicht geklappt. Wie kann man im allgemeinen Refrenzen sharen?


edit renee: [code]-Tags eingefügt\n\n

<!--EDIT|renee|1112704746-->

View full thread Threads und shared Data: Referenzen auf ein Objekt sharen