Thread Refernz übergabe in ein Objekt (8 answers)
Opened by Gast at 2008-03-27 14:18

Gast Gast
 2008-03-27 15:03
#107547 #107547
Ok ich muss glaub etwas weiter ausholen,

Hauptprogramm:


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                $progress=50;
                $ref=\$progress;
                
        print $trace;
        print $save;

        print $ref; #Ausgabe 1

                

        $t = new threads \&actualize;
        $strategy->execute( $trace, $save, $time, $ref );
        print " Progress main $progress \n";# Ausgabe 2

        print " Ref main $ref \n"; # Ausgabe 3



        $mw->waitVariable( \$finish );


In der funktion execute im Objekt $strategy:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
                my $objekt=shift;
        my $trace=shift;
        my $save=shift;
        my $kill=shift; #time per 200px
        my $progress=shift;
        my $var=$$progress;

                print $progress; #Ausgabe 4
        print $var;
                
                $var=30;

Im Thread actualize Poll ich die Variable $progress und $ref um eine fortschrittsbalken je nach dem wie weit die Funktion execute ist anzuzeigen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
                                        while($progress<100){
                        $bar->value($progress);
                        sleep(1);       
                        print $progress; #Ausgabe 5
                        print \$progress; #Ausgabe 6
                        print $ref; #Ausgabe 7
                       }
                       $finish=1;


So nun endlich zum Ergebniss *g*:

Code (perl): (dl )
1
2
3
4
5
6
7
Ausgabe1:SCALAR(0x2ddb1d4)
Ausgabe2: Progress main 50 
Ausgabe3:Ref main SCALAR(0x2ddb1d4)
Ausgabe4:SCALAR(0x2ddb1d4)
Ausgabe5:50
Ausgabe6:SCALAR(0x70eb094)
Ausgabe7:SCALAR(0x70eb094)


Problem ist nun erstens das im Hauptprogramm $progress immer noch 50 ist obwohl in der Funktion execute auf 30 gesetzt wird.

Zweites Problem ist, dass in dem Thread die referenz $ref(bzw. \$progress) eine andere Adresse anzeigt.

Hoffe so ist ersichtlicher was bei mir nicht funktioniert.

edit pq: code-tags hinzugefügt

View full thread Refernz übergabe in ein Objekt