Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Itemanzahl in einer TThreadList (https://www.delphipraxis.net/26998-itemanzahl-einer-tthreadlist.html)

Tubos 2. Aug 2004 16:39


Itemanzahl in einer TThreadList
 
Hallo;

wie kann ich - threadsicher - die Anzahl der Items in einer TThreadList feststellen?
Delphi-Quellcode:
var x: TThreadList;
x.count gibt es nicht.

Und wenn ich direkt auf x.locklist.count zugreife, ist es doch nicht mehr threadsicher, oder?

Tubos

Luckie 2. Aug 2004 16:45

Re: Itemanzahl in einer TThreadList
 
Zitat:

Zitat von Tubos
Und wenn ich direkt auf x.locklist.count zugreife, ist es doch nicht mehr threadsicher, oder?

Doch genau dann ist es threadsicher:
Zitat:

LockList calls the Windows EnterCriticalSection function to lock the thread-safe list.
Zu mindest interpretiere ich so die Hilfe.

Nalincah 2. Aug 2004 17:05

Re: Itemanzahl in einer TThreadList
 
TThreadlist? Threadsicher?

Ich versteh nicht ganz..Was heißt das?

sakura 2. Aug 2004 17:07

Re: Itemanzahl in einer TThreadList
 
Delphi-Quellcode:
var
  x: TThreadList;
  L: TList;
...
// später
L := X.LockList;
try
  ShowMessage(IntToStr(L.Count));
finally
  X.UnlockList;
end;
(siehe auch Delphi-Beispiel zu Delphi-Referenz durchsuchenLockList

...:cat:...

sakura 2. Aug 2004 17:08

Re: Itemanzahl in einer TThreadList
 
Zitat:

Zitat von General2004
TThreadlist? Threadsicher?

Ich versteh nicht ganz..Was heißt das?

Dann schaue Dich mal im Forum nach [dp="thread*"]Threads, threading, multi-tasking, etc...[/dp] um. Eine Threadliste bietet die Möglichkeit aus verschiedenen, parallel laufendenn Teilen (Threads) einer Application gleichzeitig sicher auf eine Liste von Objekten zuzugreifen.

...:cat:...

Tubos 2. Aug 2004 17:22

Re: Itemanzahl in einer TThreadList
 
Zitat:

Code:
var
  x: TThreadList;
  L: TList;
...
// später
L := X.LockList;
try
  ShowMessage(IntToStr(L.Count));
finally
  X.UnlockList;
end;

Heißt das, ich muss die Liste manuell absperren? :gruebel:

sakura 2. Aug 2004 17:24

Re: Itemanzahl in einer TThreadList
 
Zitat:

Zitat von Tubos
Heißt das, ich muss die Liste manuell absperren? :gruebel:

Schau mal hier, die Definition:
Delphi-Quellcode:
  TThreadList = class
  private
    FList: TList;
    FLock: TRTLCriticalSection;
    FDuplicates: TDuplicates;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Add(Item: Pointer);
    procedure Clear;
    function LockList: TList;
    procedure Remove(Item: Pointer);
    procedure UnlockList;
    property Duplicates: TDuplicates read FDuplicates write FDuplicates;
  end;
Ich würde sagen: eindeutig: JA.

...:cat:...

Tubos 2. Aug 2004 17:26

Re: Itemanzahl in einer TThreadList
 
Habe gerade was in der Delphi-Hilfe gefunden:

Zitat:

]Die Methode LockList sperrt die thread-sichere Liste und gibt ein TList-Objekt zurück.

Delphi-Syntax:

function LockList: TList;

C++ Syntax:

TList* __fastcall LockList(void);

Beschreibung

Unter Windows ruft LockList die Windows-Funktion EnterCriticalSection zum Sperren der thread-sicheren Liste auf. Die Methode gibt das TList-Objekt zurück, in dem sich die Liste befindet.
Heißt das, ich kann über threadlist.locklist.count die Anzahl feststellen, ohne dass ich sie irgendwie sperren muss?

sakura 2. Aug 2004 17:46

Re: Itemanzahl in einer TThreadList
 
Zitat:

Zitat von Tubos
Heißt das, ich kann über threadlist.locklist.count die Anzahl feststellen, ohne dass ich sie irgendwie sperren muss?

Der Aufruf von LockList - in Deinem Aufruf enthalten - sperrt die Liste bereits. Deswegen musst Du diese anschließend WIEDER FREIGEBEN.

Was an meinem obigen Code ist nicht verständlich :gruebel:

...:cat:...

Tubos 2. Aug 2004 18:09

Re: Itemanzahl in einer TThreadList
 
Achso...

was nützt mir dann eine "thread-sichere Liste", wenn ich an einigen Stellen sowieso manuell sperren muss? :gruebel:

edit:
ops...habe das ganze konzept falsch verstanden.
jetzt kapiere ich es.
Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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-2025 by Thomas Breitkreuz