Witam
Mam problem z aktualizacją danych między wątkami. Podam problem w formie fragmentu kodu z opisami
var
Zmienna: cośtam // zadeklarowania w sekcji zmiennych globalnych
function TForm1.wyślij;
begin
EnterCriticalSection(SK);
//zapisz coś do Zmienna
LeaveCriticalSection(SK);
Wątek := TWątek.Create(False);
end;
//potem jest wątek
procedure TWątek.Execute;
begin
FreeOnTerminate := True;
EnterCriticalSection(SK);
//zrób coś
//wynik zapisz do Zmienna
LeaveCriticalSection(SK);
OnTerminate := FunkcjaOdbierającaZWątku;
end;
procedure TForm1.FunkcjaOdbierającaZWątku(Sender:TObject);
begin
EnterCriticalSection(SK);
//zrób coś z odebranymi danymi z wątku.
LeaveCriticalSection(SK);
end;
Cała rzecz polega na tym, że dane w wątku wykonują się prawidłowo. Natomiast wątek główny po odebraniu zdarzenia nie ma aktualnych danych w Zmienna!!!
Spawdzałem w ten sposób, że bezpośrednio w Execute wątku zapisywałem dane do pliku po wykonaniu zadań wątku - dane prawidłowe.
Ponieważ wątek nie operuje bezpośrednio na zmiennych globalnych tylko na własnej kopii tych zmiennych na własnym fragmencie stosu, podejrzewam że to system nie synchronizuje odpowiednio danych, ale nie bardzo wiem co z tym dalej zrobić.
Sprawdzałem też wywołanie zdarzenia na samym końcu destruktora - efekt ten sam.
Amd Turion64 x2, Delphi6