![]() |
Delphi-Version: XE2
Von Thread auf Listview.Items.Data schreiben
Hallo,
ich weiß, dass man von einem Thread aus nicht auf VCL-Controls schreibend zugreifen darf. Aber ein lesender Zugriff ist ok (auch wenn es mehrere Threads gleichzeitig machen)? Beispiel:
Delphi-Quellcode:
Wie sieht es mit einem schreibenden Zugriff auf das Data Property einer Listview aus, wenn immer nur ein Thread gleichzeitig auf das Property zugreift. Ist das erlaubt?
procedure Thread;
var s:string; begin s := form1.listview1.items[5].caption; end; Beispiel:
Delphi-Quellcode:
Ein kurzes Ja oder Nein als Antwort würde mir schon reichen, danke!
procedure Thread1;
begin PRec(form1.listview1.items[2].data)^.sName := 'test1'; end; procedure Thread2; begin PRec(form1.listview1.items[3].data)^.sName := 'test2'; end; |
AW: Von Thread auf Listview.Items.Data schreiben
Nein
|
AW: Von Thread auf Listview.Items.Data schreiben
OK, damit habe ich jetzt nicht gerechnet :o
Dann hätte ich doch bitte eine Begründung, warum man nicht auf Data zugreifen darf, es ist doch nur ein Zeiger und jedes Item hat seinen eigenen... |
AW: Von Thread auf Listview.Items.Data schreiben
Zitat:
|
AW: Von Thread auf Listview.Items.Data schreiben
OK, danke für die Erklärung.
|
AW: Von Thread auf Listview.Items.Data schreiben
Erzeuge jeden Thread im Zustand "suspended".
Gib dann (im Hautpthread) jedem Threadobjekt alle Daten, die es für seine Arbeit braucht.
Delphi-Quellcode:
Mit dieser simplen Technik bekommt der Thread alles was er braucht von Aussen mitgeteilt.
mythread := TMyThread.Create({suspended=}True);
mythread.Startpunkt := Point(0,0); mythread.Endpunkt := Point(255,255); mythread.xxxx := ... ... mythread.Resume; // jetzt den Thread starten Anstatt dass der Thread aus den Daten des Hauptthreads liest (was Probleme macht) bekommt er eine Kopie der Daten. |
AW: Von Thread auf Listview.Items.Data schreiben
Zitat:
Dann ist kein Suspended erforderlich, und keine Properties (die dazu verleiten könnten, sie auch später noch zu verwenden -> böser Fehler). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz