Forum: Win32/Win64 API (native code)
Delphi
by uups,
24. Jan 2017
Das habe ich jetzt nicht ganz verstanden. DeleteFromQueue() wird nur aus dem vom Thread selbst aufgerufen. Public sind nur AddToQueue() und Count(). In beiden sind die Zugriffe auf die TObjectList geschützt (für Count nachträglich). Andere Methoden gibt es nicht. Was ist gemeint mit "alle Methoden in TapDataReceiverQueue integrieren und mit Criticalsection absichern"?
Forum: Win32/Win64 API (native code)
Delphi
by uups,
24. Jan 2017
Zuerst möchte ich mich für die vielen hilfreichen Beiträge bedanken, habe wieder etwas dazu gelernt. Bevor ich nun die vielen nützlichen Vorschläge umsätze, möchte ich gerne zu meiner eigentlichen Frage zurückkehren: wäre mein geposteter Code so in Ordnung oder sollen die Zugriffe auf den Queue-Thread zusätzlich mit einer TCriticalSection abgesichert werden?
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Wird die Referenzzählung wirklich deaktiviert oder wird es der ARC nur mitgeteilt, dass die String-Variable noch woanders benötigt wird?
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Ich würde spontan sagen, sowohl als auch. Anderfalls könnte ich mir die Existenz des sehr langsamen TMultipleReadExclusiveWriteSynchronizer nicht erklären können.
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Gibt es auch eine Möglichkeit, bestimmte Tasks zu priorisieren?
In meinem Fall hat die Verarbeitung der eingehenden Daten eine höhere Priorität, als andere zweitrangige Aufgaben, die sich eventuell erst während der Verarbeitung ergeben. Für diese zweitrangige Aufgaben existieren nähmlich auch Queue-Threads, die ihre Aufgaben mit einer niedriegeren Priorität abarbeiten.
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Könnte man machen, aber dabei erübrigt sich lediglich die TCriticalSection für den Zugriff auf TObjectList. Die eigentliche Frage bleibt aber: reicht allein die Absicherung der TObjectList oder muss ich auch noch den Zugriff auf den Thread mittels AddToQueue() oder Count() absichern?
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Klingt toll. Wenn ich richtig recherchiert habe, ist der TThreadPool ein Teil der neuen Parallel Library, oder? Heisst das etwa, ich muss mich dann nur um die Erstellung eines neuen Tasks kümmern und den Rest der geschichte vergessen?
Es gibt ein s.g. vordefinierter DefaultPool. Von dem kann man die Zahl der Threads abrufen, die problemlos gleichzeitig laufen können. Gilt dieser Wert für das...
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
So ist es. Der Thread startet für jede Aufgabe einen neuen Thread, der die eingentliche Verarbeitung der Daten übernimmt. Die Queue ist genau dafür da, um die Anzahl dieser Verarbeitungsthreads nicht zu überschreiten und damit das System zu überlasten.
Doch, denn die Aufrufe der Verarbeitungsthreads landen dann immer noch im Stack.
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Das schon. Allerdings werden in meinem Fall mehrere Aufgaben gleichzeitig gestartet, bis die zuvor festgelegte (für jedes System individuell errechnete) Maximalzahl von gleichzeitig zu ausführenden Aufgaben erreicht ist. Im Fall mit TThread.Queue() wird der Stack sequentiell verarbeitet.
Forum: Win32/Win64 API (native code)
Delphi
by uups,
23. Jan 2017
Hallo!
Ich habe in meinem Programm eine globale Instanz eines Threads laufen mit einer TObjectList drin. Bei dem Thread handelt es sich um eine Art Verarbeitungs-Queue, in der Aufgaben in Form von Items abgelegt und vom Thread dann verarbeitet werden. Auf die Thread-Instanz greifen mehrere andere Threads zu und zwar ausschließlich mit dem Ziel, der TObjectList neue Objekte (Aufgaben)...