AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows message queue - Limit erreicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows message queue - Limit erreicht?

Ein Thema von moelski · begonnen am 8. Dez 2010 · letzter Beitrag vom 8. Dez 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#1

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 19:29
Ein Blick in MSDN-Library durchsuchenPostMessage sagt alles:
Zitat:
There is a limit of 10,000 posted messages per message queue. This limit should be sufficiently large. If your application exceeds the limit, it should be redesigned to avoid consuming so many system resources. To adjust this limit, modify the following registry key.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERPostMessageLimit
Aber eh ich an windowsglobalen Einstellungen rumspiele, würde ich eher das Programmkonzept überdenken.

[edit]
da hat wer schneller geantwortet, als meine Leitung senden wollte


[add]
zu der For-Schleife sag ich mal Aua
Delphi-Quellcode:
procedure TForm1.HidAfterReceive(Com: TObject; Buffer: Pointer;
  Received: Cardinal);
var ByteData : AnsiString;
    i : integer;
    _msg : PHIDFeedback;
begin
  Inc(HidCount);
  New(_msg);
  SetLength(_msg.Data, Received);
  MoveMemory(@msg.Data[0], Buffer, Received);
  _msg.HidCount := HidCount;
  PostMessage(self.Handle, WM_MY_HID_DATA, 0, Integer(_msg));
end;
PS: Wenn du/ihr noch etwas Zeit habt:
http://www.delphipraxis.net/156006-n...omponente.html
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Dez 2010 um 19:35 Uhr)
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 19:39
Moin !

Zitat:
zu der For-Schleife sag ich mal Aua
Is ja gut ...
Aber das ist im Moment das kleinste Problem.

Hast du nicht einen Tip wie ich die Daten vom Empfangsthread Resourcen schonender zum Mainthread bekomme ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#3

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 20:02
Du könntest ja auf eine andere/größere Queue/Liste ausweichen?

Delphi-Quellcode:
uses SyncObjs, Generics.Collections;

var
  QueueCS: TCriticalSection;
  Queue: TQueue<THIDFeedback>;


var
  Temp: THIDFeedback;
begin
  // hid-thread
  SetLength(Temp.Data, Received);
  MoveMemory(@Temp.Data[0], Buffer, Received);
  Temp.HidCount := HidCount;
  QueueCS.Enter;
  try
    Queue.Enqueue(Temp);
  finally
    QueueCS.Leave;
  end;


  // mainthread
  QueueCS.Enter;
  try
    Found := Queue.Count > 0;
    if Found then Temp := Queue.Dequeue;
  finally
    QueueCS.Leave;
  end;
  if Found then
  begin
    // temp auswerten
  end;
Statt Record, CS und gen. Queue könnte man auch TThreadList mit Objekten nutzen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 20:05
@himutsu:
Danke das werde ich doch glatt mal ausprobieren.

@Luckie:
Basilikum hats ja schon geschrieben. Ich übergebe ja einen Pointer mit PostMessage.
http://edn.embarcadero.com/article/22411
Da wird das übrigens auch so gemacht.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 19:40
Der Speicher von _msg wird nicht wieder freigegeben.
Delphi-Quellcode:
 New(_msg);
  _msg.Data := ByteData;
  _msg.HidCount := HidCount;
  PostMessage(self.Handle, WM_MY_HID_DATA, 0, Integer(_msg)); // Daten übergeben
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 19:42
Moin !

Zitat:
Der Speicher von _msg wird nicht wieder freigegeben.
Sollte doch in DecodeHID mittels Dispose(_msg) erfolgen ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 19:55
Lokale Variablen verlieren ihre Gültigkeit beim Verlassen der Routine. _msg aus HidAfterReceive ist in Decode-Dingsbums unbekannt. Zu mal du in Decode-Dingsbums _msg auch deklariert hast. Das sind zwei unterschiedliche Variablen, auch wenn sie gleich heißen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#8

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 20:04
Lokale Variablen verlieren ihre Gültigkeit beim Verlassen der Routine. _msg aus HidAfterReceive ist in Decode-Dingsbums unbekannt. Zu mal du in Decode-Dingsbums _msg auch deklariert hast. Das sind zwei unterschiedliche Variablen, auch wenn sie gleich heißen.
Oberflächlich betrachtet ist diese Aussage natürlich korrekt - aber wenn man es genauer anschauen würde, würde man erkennen, dass zwischen den beiden Funktionen die erwähnte Windows-Message-Queue steckt, welche den Pointer auf den vermeindlich nicht freigegebenen Speicher an die Funktion überliefert, welche den Speicher dann korrekt freigibt - das Speicher-Handling ist korrekt...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 20:11
OK, aber was passiert, wenn es dabei zu einem Fehler kommt? Dann hast du den Schlamassel.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Windows message queue - Limit erreicht?

  Alt 8. Dez 2010, 20:13
Zitat:
Schlamassel
Den habe ich gerade schon ohne Fehler

Drum versuche ich mich gerade an himutsu Vorschlag.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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