Ciao,
mi trovo nella seguente situazione: All'interno di un Thread, la procedura TThread.Execute (nell'esempio sottostante: main) include delle procedure. In una di queste procedure (nell'esempio: proc1) viene creato un oggetto il quale, a sua volta, include come parametro di tipo System.Pointer una procedure (nell'esempio: proc2).
type
TWorkerThread = class(TThread)
private
var#1;
...
Procedure TWorkerThread.Execute; //main
begin
...
for i := 0 to FileCount do
begin
procedure proc1;
WriteLog('step 3');
end;
end;
Procedure TWorkerThread.proc1;
var
var#2
begin
...
WriteLog('step 1');
obj := TObj.Create(nil);
for n := 0 to PageCount do
obj.Do(proc2
begin
... (uso di var#1 e var#2)
WriteLog('step 2');
end);
end;
Nel log file, invece di trovarmi la seguenza 'step 1' (proc1) - 'step 2' (proc2) - 'step 3' (main), trovo step 1 - 3 - 2.
Presumo che "proc1" risulta finito con l'inizio di "proc2" perché all'interno di "proc2" la variabile "n" del primo loop di "proc1" viene valorizzato con "1" invece di "0".
Per evitare che le variabili condivise utilizzate in "proc2" vengano valorizzate dal successivo loop di "proc1" o "main", è possibile far attendere il ciclo loop di "proc1" la fine del suo processo "proc2", in modo che il loop di "main", a sua volta, non proceda (e che quindi nel file log risulti la seguenza 1 - 2 - 3)?
Oppure esiste un modo migliore di quello sopra descritto per organizzare le procedure/variabili all'interno del Thread per eliminare il problema dei valori errati?
Ale