Einzelnen Beitrag anzeigen

Breager

Registriert seit: 18. Feb 2012
40 Beiträge
 
#9

AW: Änderungen von Variablen synchronisieren

  Alt 18. Mär 2012, 01:46
Danke himitsu!

Das klingt nicht so gut

Hier mal ein Versuch, das ganze mit InterlockedExchange sicher zu machen:
Delphi-Quellcode:
Var ThreadString:AnsiString;
    ThreadString_Locked:Integer;
...
ThreadString_Locked:=Integer(False);
...

Function SetThreadString(S:AnsiString):Boolean;
Var TimeOut:Integer;
Begin
 TimeOut:=0;
 Repeat
  IF InterlockedExchange(ThreadString_Locked,Integer(True)) = 0 then
     BEGIN
      ThreadString:=S;
      InterlockedExchange(ThreadString_Locked,Integer(False));
      Result:=True;
     END ELSE
      Result:=False;
  Inc(TimeOut);
 Until (TimeOut>1000) OR Result;
End;
Das weitere Verarbeiten der Liste (Sortieren, etc.) findet nur im Mainthread statt. Hierbei müsste ich einfach überprüfen, ob der Thread aktiv ist oder ThreadString_Locked auf True gesetzt ist.

Mal noch eine generelle Frage: Solange ich den Wert einer globalen Variablen nur innerhalb "eines" Threads ändere, kann doch eigentlich nicht passieren, und beim Lesen doch sowieso nichts?
  Mit Zitat antworten Zitat