Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mit 4 Threads ein ListView bearbeiten (https://www.delphipraxis.net/102267-mit-4-threads-ein-listview-bearbeiten.html)

Jackie1983 25. Okt 2007 22:44


Mit 4 Threads ein ListView bearbeiten
 
hi,

habe eine ListView in der die zu bearbeitenen Aufgaben stehen.
Jetzt starte ich 4 Threads.

In jedem Thread wird geprüft ob die Aufgabe noch nicht erledigt wurde
Delphi-Quellcode:
      if flv.Items.Item[i].Checked then
      begin
        flv.Items.Item[i].Checked := false;
        //bearbeite aufgabe
        //...
wenn die aufgabe noch nicht erledigt wurde wird sie gecheckt damit der andere Thread diese aufgabe nicht mehr bearbeiten muss. Nur leider funktioniert das ganze nicht. Jeder Thread bearbeitet alles.

Wie kann ich von allen Threads ein ListView bearbeiten?

Dunkel 25. Okt 2007 23:29

Re: Mit 4 Threads ein ListView bearbeiten
 
Zitat:

Zitat von Jackie1983
Wie kann ich von allen Threads ein ListView bearbeiten?

Synchroner Schreib-Zugriff mehrere Threads auf Speicherbereiche regelt man AFAIK am besten mit Hier im Forum suchenCriticalSection, lesend sollte synchrone DV kein Problem sein.

Flocke 26. Okt 2007 07:35

Re: Mit 4 Threads ein ListView bearbeiten
 
Zitat:

Zitat von Jackie1983
Wie kann ich von allen Threads ein ListView bearbeiten?

Die VCL ist von Hause aus nicht threadsicher. Schreibe dir in deinen Threads (bzw. in deren Basisklasse) eine Methode "GetNextTask", die die nächste Aufgabe holt und auch gleichzeitig die Markierung entfernt. Diese Methode rufst du dann mit "Synchronize" auf, dann wird sie im Hauptthread ausgeführt.

RavenIV 26. Okt 2007 08:14

Re: Mit 4 Threads ein ListView bearbeiten
 
Zitat:

Zitat von Flocke
Zitat:

Zitat von Jackie1983
Wie kann ich von allen Threads ein ListView bearbeiten?

Die VCL ist von Hause aus nicht threadsicher. Schreibe dir in deinen Threads (bzw. in deren Basisklasse) eine Methode "GetNextTask", die die nächste Aufgabe holt und auch gleichzeitig die Markierung entfernt. Diese Methode rufst du dann mit "Synchronize" auf, dann wird sie im Hauptthread ausgeführt.

Du solltest beachten, dass dann der Hauptthread und der jeweilige Arbeiterthread solange stehen, bis die Synchronize-Methode abgearbeitet ist.
Das ist mir mal bei einem grösseren Programm aufgefallen.

Jackie1983 26. Okt 2007 13:42

Re: Mit 4 Threads ein ListView bearbeiten
 
thx, werde es mal versuchen....


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz