Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows message queue - Limit erreicht? (https://www.delphipraxis.net/156616-windows-message-queue-limit-erreicht.html)

s.h.a.r.k 8. Dez 2010 22:12

AW: Windows message queue - Limit erreicht?
 
Damit teilt man ja lediglich die Anzahl der Messages durch 1000, was ja schon mal ein Anfang wäre. Allerdings ist es immer noch fraglich, ob das ausreichend ist. Kannst du nicht eine Software bauen, die mal nur die zu erzeugenden Messages zählen kann? Einfach die Messages nicht weg schicken, sondern nur zählen, dann kannst daraus vielleicht eine Kennzahl ermitteln, wie groß das Array denn werden soll. Verbunden damit ist aber auch das Speicherproblem -> Wie groß würde ein Array den werden?!

Und: bist du sicher, dass du den Mainthread nicht an entscheidener Stelle beschleunigen kannst, sodass er die ankommenden Messages vielleicht schneller abarbeiten könnte?!

jfheins 8. Dez 2010 22:25

AW: Windows message queue - Limit erreicht?
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1067252)
Damit teilt man ja lediglich die Anzahl der Messages durch 1000, was ja schon mal ein Anfang wäre. Allerdings ist es immer noch fraglich, ob das ausreichend ist.

Die messagequeue sollte zumindest nicht mehr überlaufen. Wenn das zeug natürlich langsamer verarbeitet wird, als es reinkommt wird der Speicher langsam aber sicher knapp da ja alles gepuffert wird. Aber wo will man da sparen ohne Daten zu verlieren?
Andererseits ...
Zitat:

Verbunden damit ist aber auch das Speicherproblem -> Wie groß würde ein Array den werden?!
sollte das nicht allzu schlimm werden:
Zitat:

Zitat von moelski (Beitrag 1067184)
(~40.000 Telegramme á 57 Byte)


himitsu 8. Dez 2010 22:37

AW: Windows message queue - Limit erreicht?
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1067232)
Hm, Generics.Collections.TQueue hat OnNotify als Event. Allerdings weiß ich nicht, wie das läuft, wenn du diese Queue mit mehreren Threads befüllst -- also in welchem (Thread-)Kontext denn der Code der hinter dem Event steht dann ausgeführt wird.

TQueue ist nicht thread-save, also sollte das Event im Kontext des Befüllers ablaufen, also in dem betreffenden Thread.
Drum war auch bei dem Vorschlag die CS verbaut.

Nja, du könntest schon über 'nen Timer arbeiten, dann jeweils in einem Timerereignis mehrere Einträge aus dem Queue rausholen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Seite 3 von 3     123   

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