Entwickler-Ecke
Windows API - ständige Überwachung
Clemens - Di 02.08.05 09:59
Titel: ständige Überwachung
Hallöchen,
ich brauchte eine Prozedur/Funktion, die ständig etwas überwacht. Sollte ohne den Timer sein.
Hat an so was gedact.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Loop; var b:Boolean;
begin
b:=true;
while b=true do begin
end;
... |
allerdings hängt sich das Programm dann ja immer auf. :twisted: Gibt es da was anderes. Bei der nonVCL
gibt's das für die Nachrichten ja irgenwie auch und es klappt
ja auch.
Delphi-Quelltext
1: 2: 3: 4:
| while GetMessage(msg,0,0,0) do begin DispatchMessage(msg); end; |
P.S. gibts irgendwo nen schnelleren Timer?
Danke
Heiko - Di 02.08.05 10:01
Timer sidn alle realtiv schnell. Die Frage ist wofür du es brauchst (also wie groß der Rhytmus sein muss). Aso und in deiner while-do-Schleife musst du noch Application.Processmessages einbauen, damit man nicht denkt, dass das Programm abgeschmiert ist.
Tino - Di 02.08.05 10:03
Titel: Re: ständige Überwachung
Clemens hat folgendes geschrieben: |
allerdings hängt sich das Programm dann ja immer auf. |
Wie kommst du darauf, dass sich das Programm aufhängt?
Versuche mal in der Loop "Schleife"
Application.ProcessMessages aufzurufen. Dann werden die Fensternachrichten auch verarbeitet.
Gruß
Tino
EDIT: Upps.. war wohl etwas zu langsam ;-)
Heiko - Di 02.08.05 10:06
@Clemens: Wenn Windows meldet, das er keine Rückmeldung hat, bedeutet das nur, dass das Programm auf Nutzerreaktionen nicht reagiert, es heißt nicht, dass das Programm abgeschmiert ist.
Clemens - Di 02.08.05 10:12
Vielen Dank,
jetzt klappts. Das einzige Problem ist das ich
das Programm nicht über den X-Button oben rechts beenden kann.
(Minimieren,bewegen... geht)
Muss ich da die Schleife erst beenden? Und was ist wenn ich
die für ganz viele Objektinstanzen deklariere, schluckt das dann viele Systemressourcen?
Udontknow - Di 02.08.05 10:13
Hallo!
Deine Schleife muß auf "not Application.Terminated" prüfen (btw: Für Endlosschleifen reicht ein "while true do ...").
PS: Bin mir gerade nicht sicher, ob dort schon Application.Terminated true ist... *Grübel*
Cu,
Udontknow
Heiko - Di 02.08.05 10:14
Problem beenden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var Beenden: Boolean=false
procedur xyz; begin while true do begin if Beenden then break; Application.ProcessMessages end; end;
procedure TForm1.FormClose(Sender: TObjekt); begin Beenden:=true end; |
Clemens - Di 02.08.05 10:16
Muss ich gleich mal ausprobieren. :D
Thanks
Wiekönnte ich das denn jetzt so verändern, dass er so wie der
Timer in einem bestimmten Zeitintervall immer prüft, sagen wir
mal jede Millisekunde ein Mal?
rochus - Di 02.08.05 10:40
Hi!
Ich hab gerade keine direkte Antwort auf deine Frage, aber eventuell könnte es helfen, wenn du sagst, was du überwachen möchtest. Wenn du nämlich irgendwelche Systemeinträge kontrollieren möchtest, könntest du auch eventuell über WMI und WMI-Events an die Veränderungen rankommen.
Gruß
Nicolai
Clemens - Di 02.08.05 10:54
Hi,
ich möchte überwachen ob der Mauszeiger auf einer ImageSprite gedrückt wird. Da habe ich nämlich auch schon ein neues Problem: man kann von oben genennter Funktion irgendwie nur eine beginnen. Bei mir müsste jedoch jede Instanz sich selber überwachen, sprich braucht einen eigenen Methodenaufruf.
Wenn ich jedoch die zweite Sprite erzeuge wird die Loop-Funktion von der ersten Sprite beendet.
Hoffe du/ihr weißt/wisst was
uall@ogc - Di 02.08.05 10:58
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function schleife(p: integer): integer; begin while true do begin sleep(100); end; end;
procedure TForm1.OnCreate(Sender: TObject); var tid: cardinal; begin BeginThread(nil,0,@schleife,nil,0,tid); end;
var tid: cardinal; begin BeginThread(nil,0,@schleife,nil,0,tid); while true do readln; end. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!