Thread Refernz übergabe in ein Objekt
(8 answers)
Opened by Gast at 2008-03-27 14:18
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 |