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?