Wątki wymiana danych błędy

0

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

0

Poprzez Synchronize dokonaj aktualizacji zmiennej w watku glownym

1 użytkowników online, w tym zalogowanych: 0, gości: 1