AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Grund herausfinden, warum PostMessage() nicht funktioniert hat

Grund herausfinden, warum PostMessage() nicht funktioniert hat

Ein Thema von s.h.a.r.k · begonnen am 8. Mär 2011 · letzter Beitrag vom 9. Mär 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

AW: Grund herausfinden, warum PostMessage() nicht funktioniert hat

  Alt 9. Mär 2011, 17:52
Die Grenzen für die Anzahl der Messages kenne ich schon. Wobei ich mir leicht vorstellen kann, dass diese mal voll läuft, wenn ein Programmierer z.B. eine Berechnung über mehrere Sekunden laufen lässt (ohne Threads) und in jedem Schleifendruchgang mind. eine Log-Meldung erzeugt. So können schnell 10000 Meldungen zusammen kommen, ohne dass diese Abgearbeitet werden. Ein Application.ProcessMessages könnte das beheben, macht meine Log-Klasse dann aber wieder langsamer UND ich könnte dann eigentlich gleich mit Events arbeiten.

Bisher ist das Konzept so ausgelegt, dass jede Log-Message ein PostMessage() verursucht, um die einzelnen Log-Module (Datei-Modul und Log-ListBox gibts hier im Moment) zu benachrichtigen. Jedem Log-Modul wird ein Log-Message-Objekt erzeugt und die Referenz darauf wird via PostMessage verschickt.

Ich habe im Moment folgende Idee im Kopf: um dem "Überlauf-Problem" von vorn herein aus dem Weg zu gehen, baue ich die Benachrichtigung so um, dass das PostMessage dem Modul nur signalisiert, dass neue Nachrichten vorhanden sind, enthält somit keinerlei Referenz auf die neue Log-Nachricht. Dann schaut das Modul in eine entsprechende Liste und holt sich alle neuen Log-Nachrichten selbst ab. Ist die Message-Queue voll, so kommt die Benachrichtigung zwar nicht an, aber evtl. gelingt dies dann später. Es gibt noch ein paar Haken dabei, aber vielleicht klappt das ja besser, mal sehen.

Insgesamt glaube ich, dass meine Fragen nun aber ausreichend beantwortet wurden und das Konzept-Problem hier nicht mehr so ganz her gehört. Danke schon mal an alle
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Grund herausfinden, warum PostMessage() nicht funktioniert hat

  Alt 9. Mär 2011, 21:35
PS: Du kannst deine Log-Klasse, bzw. die "Form" zu dieser Klasse in einem eigenem Thread erstellen, über die nun unabhängige MessageLoop/Verarbeitungsschleife kannst du da in Ruhe arbeiten.

Wobei man nichmal eine "Form" benötigt (und man hierbei sowieso keine VCL-Form verwenden dürfte), da man Messages auch direkt an einen Thread senden kann > MSDN-Library durchsuchenPostThreadMessage.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:26 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