AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TTimer und Abarbeitung der Messages
Thema durchsuchen
Ansicht
Themen-Optionen

TTimer und Abarbeitung der Messages

Ein Thema von Blamaster · begonnen am 13. Okt 2014 · letzter Beitrag vom 14. Okt 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: TTimer und Abarbeitung der Messages

  Alt 13. Okt 2014, 20:54
Wenn ich manuell was in die Queue schiebe, dann wird das nicht verworfen.
Sehr verwirrend.

Delphi-Quellcode:
type
  THackedTimer = class(TComponent)
  private
    FInterval: Cardinal;
    FWindowHandle: HWND;
  end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 500;
  Timer2.Enabled := False;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Memo1.Lines.Add('OnTimer');

  if THackedTimer(Timer1).FInterval = 0 then ;
  PostMessage(THackedTimer(Timer1).FWindowHandle, WM_TIMER, 1, 0);

  Sleep(1500);
  Memo1.Lines.Add('Disable');
  Timer1.Enabled := False;
end;

procedure TForm2.Timer2Timer(Sender: TObject);
begin
  //
end;
Ich dachte Windows schiebt die Timer-Events asynchron in die Queue.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#2

AW: TTimer und Abarbeitung der Messages

  Alt 14. Okt 2014, 11:51
Wirklich merkwürdig.

Was mich jetzt aber doch zusätzlich noch interessieren würde wie nun intern das abholen der Messages organisiert ist.
Es muss ja irgendwo im Hintergrund sowas wie eine MessageLoop geben. Nur unter welchen Voraussetzungen arbeitet die MessageLoop, sprich wann wird Sie abgearbeitet ?

Mich wundert ja noch immer das während sich das Programm im destructor befindet überhaupt noch Messages behandelt werden. Ich wäre jetzt erstmal davon ausgegangen das mit dem betreten des destructor automatisch keine weitere Messageverarbeitung mehr abgeholt werden.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: TTimer und Abarbeitung der Messages

  Alt 14. Okt 2014, 12:19
Ich kann nichts konstruktives beitragen, nur anmerken, dass mir das auch schon öfter passiert ist: Abarbeiten irgendwelcher Timer-Messages während des Herunterfahrens, wenn schon formularmäßig so gut wie alles zerstört ist...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TTimer und Abarbeitung der Messages

  Alt 14. Okt 2014, 12:34
Ich kann nichts konstruktives beitragen, nur anmerken, dass mir das auch schon öfter passiert ist: Abarbeiten irgendwelcher Timer-Messages während des Herunterfahrens, wenn schon formularmäßig so gut wie alles zerstört ist...
Nach dem Freigeben der Form (genauer nach dem Freigeben des TTimer und dessen interne MessageOnlyForm) sollte eigentlich nichts mehr eintreffen.

Das Window, an welches das WM_TIMER geschickt wird, ist dann weg.
Wenn Fenster freigegeben werden, werden deren Messages aus der Queue entfernt, aber selbst wenn nicht, dann existiert das Fenster nicht mehr, welches diese Message empfangen und verarbeiten kann.



Die Queue wird in TApplication.ProcessMessage verarbeitet, welches durch Application.Run, Application.HandleMessage und Application.ProcessMessages behandelt wird.

In der VCL also immer wenn Application.ProcessMessages aufgerufen wird, bzw. zwischen den anderen VCL-Ereignissen (Messages wie Button-Klicks, Timer-Events usw.), welche über/in/durch ProcessMessage ausgeführt werden.
Ein Therapeut entspricht 1024 Gigapeut.
  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 01:37 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