Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Mär 2010
Wenn du die Live-Werte extra vorhälst, dann wird FLast nicht benötigt und eine stinknormale einfach verkettete Liste reicht vollkommen aus.
ach nee, für's Anhängen neuer Daten wird FLast ja dennoch benötigt.
uses
Windows, Classes, SysUtils, SyncObjs;
type
POneData = ^TOneData;
TOneData = record
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Mär 2010
OK, dann ist der fortlaufende Index für den Zugriff garnichtmal nötig.
Hier gibt es aber erstmal ein Problem:
Wenn jetzt zwei Threads immer alle Daten verarbeiten sollen und gleichzeigtig einer der Threads die Liste löschen würde.
Lösungen:
- entweder für jeden der Threads eine eigene Liste
- oder Beides in einem Thread lösen (also die beiden Dateien zusammen erstellen)
Die Abfrage...
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Mär 2010
OK, wenn das Event drinnenbleiben soll und man keine zusätzliche Schleife möchte, dann halt das Event nur zurücksetzen, wenn nichts mehr in der Liste steht.
function TDataClass.ExtractFirst: POneData;
begin
Lock;
try
if Assigned(FFirst) then
begin
Result := FFirst;
FFirst := FFirst^._Next;
if not Assigned(FFirst) then
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Mär 2010
Jupp
Ich würde TEvent aber weglassen oder zumindestens Folgendes in eine Schleife legen, welche solange arbeitet, bis keine Daten mehr in der Liste stehen oder bis Terminated = True.
PData := FDataClass.ExtractFirst;
if Assigned(PData) then
begin
try
Verarbeite(PData^);
finally
Dispose(PData);
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Mär 2010
Suchen wirst du so oder so müssen, es sei denn du nimmst die ID doch direkt als Index und erzeugst für alle nichtvorhandenen IDs leere Einträge.
Und das Suchen würde natürlich in das "Array"-Objekt integriert.
Halt so ähnlich, als wie es bei StringListe.Name gelöst ist.
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
24. Mär 2010
Genau,
der Index für den Zugriff auf die Daten wäre dann nicht der "Index" der Daten innerhalb der Datenhaltung, sondern der Wert eines Feldes innerhalb der einzelnen Daten.
Beim Zugriff müßten dann nur die Daten mit dem entsprechende Indexwert gesucht werden ... ähnlich .Name bei einer Stringliste.