AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Befehl immer wieder ausführen ohne CPU belastung

Befehl immer wieder ausführen ohne CPU belastung

Ein Thema von BlueLiquidCell · begonnen am 29. Jun 2010 · letzter Beitrag vom 10. Jul 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 29. Jun 2010, 14:37
if Sender = Button2 then Der Sender kann sich niemals einfach so innerhalb des Funktionsaufrufs verändern.
Wenn der Timer weiterläuft, dann wird über Application.ProcessMessages
immer wieder eine neue "Instanz" von Timer1Timer gestartet, welche niemals enden wird (Endlosschleife)

Da aber immer mehr Prozeduren gesartet werden, wird dieses Unweigerlich irgendwann in einem Stacküberlauf enden müssen.

Wozu überhaupt diese Schleife?
Delphi-Quellcode:
procedure TForm5.Timer1Timer(Sender: TObject);
var
    fHandle: HWND;
begin
    fHandle := FindWindow('notepad', nil);
    if (fHandle <> 0) and (GetForeGroundWindow <> fHandle) then
        SetForeGroundWindow(fHandle);
end;
Timer1.Intervall auf 50 eingestellt und du hast das selbe Ergebnis, aber ohne das Stackproblem.

PS: Warum ein rießiger Integer i, wo dieser doch nur wie ein Boolean verwendet wird?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jun 2010 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 5. Jul 2010, 17:58
PS: Warum ein rießiger Integer i, wo dieser doch nur wie ein Boolean verwendet wird?
Ein Boolean ist auch nicht gerade "winzig" ... ist immerhin 1/4 x so groß wie ein Integer
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 5. Jul 2010, 18:47
Standardmäßig bietet er aber "logisch" gesehn genau die 2 nötigen Zustände.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#4

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 5. Jul 2010, 20:37
MSchmidt - WM_NCACTIVATE()

Hab das mit dem WM_NCACTIVATE() mal ausprobiert. Wie das bei meiner eigenen Form funktioniert ist klar aber wie kann ich das denn allgemein überwachen, welches Programm grade diesen Befehl bekommt.

Christoph
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 5. Jul 2010, 23:10
Ich würde mal sagen, da du ja das Fensterhandle von deinem Prozess hast, kannst du auch an das die Nachricht schicken (Send-/PostMessage). Als Parameter solltest du für wParam ein TRUE und für lParam ein -1 nehmen. Laut MSDN sagt das dann dem Fenster, es soll sich eine aktive Titelleiste zulegen, auch wenn diese dann nicht gezeichnet wird.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#6

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 6. Jul 2010, 13:34
Ja das könnte ich machen, aber das Problem war ja primär zu wissen wann es auf nicht aktiv gesetzt wird um dann was dagegen zu tun. Momentan mach ich das halt alle 100ms oder so, und das is ja nicht so das wahre.
Oder hab ich dich jetzt falsch verstanden?
Christoph
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#7

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 7. Jul 2010, 10:51
Also hab das WM_NCACTIVATE ausprobiert. Mit Notepad funktionierts. Bin momentan nicht an meinem anderen Rechner, deswegen kann ich das mitm sound grad nicht ausprobieren.
Das mit dem lParam hab ich allerdings noch nicht so ganz verstanden. Hab Einstellung 1, 0, -1 ausprobiert und nicht wirklich einen unterschied gemerkt.
Zur Aktivierung die Aktion ausgeführt wird hab ich mir überlegt, dass man ja nach jedem Mausklick ein bisschen wartet und es dann ausführt. Gibt es eine Möglichkeit den Mousklick auf dem gesamten Desktop zu überwachen? Oder geht das nur innerhalb der Form?
Christoph
  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 18:53 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