AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TApplication.Processmessage

Ein Thema von mentaltec · begonnen am 24. Mai 2013 · letzter Beitrag vom 28. Mai 2013
Antwort Antwort
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#1

TApplication.Processmessage

  Alt 24. Mai 2013, 15:26
Hallo,

kann mir jemand sagen, wie ich das private TApplication.Processmessage aufrufen kann?

Hintergrund: ich will in einer etwas zeitkritischen Anwendung auf ein Ereignis warten und während dessen nicht die MessageQueue blockieren - aber halt sofort nach Eintritt des Ereignisses mit meiner Procedure fortfahren und nicht, wie bei .ProcessMessages(), nachdem alle Messages aus der Queue abgearbeitet wurden

mir schwebt so etwas wie TMyApplication = class(TApplication) .. vor, aber geht sowas?

mfg
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TApplication.Processmessage

  Alt 24. Mai 2013, 15:36
Ich verstehe nicht ganz.

Wenn du verhindern möchtest, dass Windows deinen Prozess als 'reagiert nicht' einstuft, musst du die Message Queue nicht abarbeiten. Du musst sie nur ab und zu anfassen, ich glaube der WinAPI-Aufruf PeekMessage(..) reicht schon.
  Mit Zitat antworten Zitat
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#3

AW: TApplication.Processmessage

  Alt 27. Mai 2013, 09:07
Wenn du verhindern möchtest, dass Windows deinen Prozess als 'reagiert nicht' einstuft, musst du die Message Queue nicht abarbeiten.reicht schon.
nö, was der Taskmanager von meinem Prozess hält ist mir rel. schnuppe
mir geht es darum, dass der auf das Ereigniss wartende Thread (eigentlich besser -> die wartende Aufgabe, da zZt. beides im VCL-Mainthread läuft) möglicherweise für mich eine höhere Priorität hat als die in der Queue wartenden Messages; also möchte ich, dass meine Aufgabe sofort nach Eintreffen des Ereignisses abgeschlossen wird und nicht erst, nachdem alle anderen Messages aus der Queue abgearbeitet wurden -- das ist währe genau das, was bei ProcessMessages passiert

wenn man sich der Sache mal von der theoretschen Seite nähert kann man sagen: wenn es sinvoll ist ProcessMessages zu benutzen, könnte es auch sinnvoll sein ProcessMessage zu benutzen
nur ist das Eine public und das Andere private
und so kahm ich auf die Frage ob man ein abgeleitetes TApplication als Basis für eine Anwendung nutzen kann

natürlich kann man das Problem auch mit einem separaten Thread lösen - aber das erhöht den Sync-Aufwand erheblich; und wie sich das dann erforderlichen Synchronize auf die Abarbeitungszeit auswirkt, weiss ich auch nicht

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#4

AW: TApplication.Processmessage

  Alt 27. Mai 2013, 09:36
Man kann keine Ableitung von TApplication verwenden, da die verwendete Application-Instanz bereits im initialization-Abschnitt von Vcl.Controls instanziert wird (in InitControls). Selbst wenn das ginge, könntest du damit immer noch nicht auf die private Methode ProcessMessage zugreifen.

Du kannst aber alternativ HandleMessage aufrufen. Das ist eigentlich noch besser, da es die Hints und Actions aktualisiert und nebenbei auch noch das Synchronize der Threads durchlässt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#5

AW: TApplication.Processmessage

  Alt 27. Mai 2013, 11:06
>> könntest du damit immer noch nicht auf die private Methode zugreifen

Richtig, wo ist mein Kopf?

>> Du kannst aber alternativ HandleMessage aufrufen

Prima, das ist nah genug, da ich eh nicht mit OnIdle und TActions hantiere

Danke
  Mit Zitat antworten Zitat
knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#6

AW: TApplication.Processmessage

  Alt 27. Mai 2013, 11:31
Wie sieht's denn damit aus?

Delphi-Quellcode:
  TMyApplication = class(TApplication)
  public
    function ProcessMessage(var Msg: TMsg): Boolean;
  end;

...

{ TMyApplication }

function TMyApplication.ProcessMessage(var Msg: TMsg): Boolean;
begin
  inherited;
end;


Aufruf:

procedure TForm1.Button1Click(Sender: TObject);
var
  Msg: TMsg;
begin
  TMyApplication(Application).ProcessMessage(Msg);
end;
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#7

AW: TApplication.Processmessage

  Alt 28. Mai 2013, 16:03
yo, funzt -- das hat sich der Schöpfer aber auch anders gedacht;
als Verfechter der "Reinen Lehre" würde ich das als Bug klassifizieren

schönes Forum : man bekommt nicht nur die richtige Antwort, sondern auch die die funktioniert

mfg

Geändert von mentaltec (28. Mai 2013 um 16:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.341 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TApplication.Processmessage

  Alt 28. Mai 2013, 19:04
Besser finde ich da einen class helper zu benutzen. Denn der ist dafür gedacht, dass man im Kontext der Klasse handelt, während das mit der abgeleiteten Klasse eher ein Trick ist.
Delphi-Quellcode:
// das in eine Unit in der uses-Klausel oder in die eigene Unit:
TProcessMessageApplication = class helper for TApplication
  procedure DoProcessSingleMessage;
end;

procedure TProcessMessageApplication.DoProcessSingleMessage;
begin
  Self.ProcessMessage;
end;

// und dann einfach benutzen:
Application.ProcessMessage;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 18:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz