Der Zugriff in der for-Schleife erfolgt eben nicht synchronisiert
Die erste Verwendung von
frm_main.lv_waagen.Items.Count-1 ist nicht synchronisiert, die zweite schon.
Warum?
Weil du das so programmiert hast?
Delphi-Quellcode:
FCS.Acquire;
// nicht synchronisierter Zugriff auf eine VCL-Komponente
for I := 0
to frm_main.lv_waagen.Items.Count-1
do
begin
Synchronize(
Procedure
begin
// hier ist es synchronisiert
frm_main.Writelog('
Sende Register '+inttostr(i)+'
von '+inttostr(frm_main.lv_waagen.Items.Count-1));
end
);
FTCPClient.SendCmd('
Register:'+frm_main.lv_waagen.Items[i].SubItems[2]+'
:@');
end;
FCS.Release;
Wobei diesesa andauernde Zugriff auf frm_main (und dann auch noch globale Variable
) sagen wir mal: potential zur Verbesserung bietet.
Wie kann man denn besser innerhalb des Threads auf Variablen / Daten des Hauptthreads (oder möglichweise auch anderen Threads) zugreifen?
Ich kenne bisher nur die Möglichkeit Daten an den Hauptthread mit Synchronize sicher zu übergeben.
Geht das mit Funktionen auch? Ich kenne das nur mit procedure.
Ab besten gar nicht, sondern man übergibt dem Thread die Informationen, die er zum Laufen braucht und der arbeitet das ab.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)