Wenn jeder Thread beim Erzeugen eine Kopie von MyConfig bekommt, dann wäre zumindest das Problem mit dem Mehrfachzugriff geregelt.
Noch besser wäre, wenn jeder Thread nur die Daten bekommt, die er auch braucht!
Wenn irgendjemand Geld vor dir möchte, dann gibst du ihm ja auch nicht deine Geldbörse mit
Bargeld, Kredit- und Visitenkarten, sondern du gibst ihm nur die Geldmenge die er haben will.
Aus dem gleichen Grund ist es unfein globale Objekte an Threads zu geben.
Fiktives Beispiel:
Delphi-Quellcode:
function CreateAndStartDatenleseThread: TDatenleseThread;
begin
Result := TDatenleseThread.Create;
Result.ComPort := MyConfig.ComPort;
Result.Baudrate := MyConfig.Baudrate;
...
Result.Resume;
end
Die Daten des Objektes werden nur gelesen. Wenn sie geändert werden dann müssen die Threads nach den neuen Daten arbeiten. Und geändert werden sie nur von genau einem Thread der eben ein Webinterface mit diesen Einstellungen bereitstellt. Ich kann also nicht viel mit threadlokalen Kopien dieser Daten anfangen.
Was passiert wenn ich BeginWrites im selben threat kaskadiere?
Delphi-Quellcode:
BeginWrite;
BeginWrite;
EndWrite;
EndWrite;
Oder BeginReads im WriteLock block des selben threads nutze?
Delphi-Quellcode:
BeginWrite;
BeginRead;
EndRead;
EndWrite;
geht das?
Eine Sache wäre da noch. Gibt es 'ne Möglichkeit threadsichere Getter und Setter für Published Properties automatisch zu erzeugen?
Oder gibt es ein "Synchronized", "Threadsafe" oder "Atomic" Flag oder so für Properties?