Autor |
Beitrag |
Clemens
      
Beiträge: 22
|
Verfasst: Di 02.08.05 09:59
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.  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
Zuletzt bearbeitet von Clemens am Di 02.08.05 10:01, insgesamt 1-mal bearbeitet
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 02.08.05 10:03
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
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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 
      
Beiträge: 22
|
Verfasst: 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
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: 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
Zuletzt bearbeitet von Udontknow am Di 02.08.05 10:16, insgesamt 2-mal bearbeitet
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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 
      
Beiträge: 22
|
Verfasst: Di 02.08.05 10:16
Muss ich gleich mal ausprobieren.
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
      
Beiträge: 416
Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
|
Verfasst: 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
_________________ Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
|
|
Clemens 
      
Beiträge: 22
|
Verfasst: 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
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: 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. |
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|