Autor Beitrag
Clemens
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 22



BeitragVerfasst: 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.

ausblenden 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
while GetMessage(msg,0,0,0do
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 02.08.05 10:03 
user profile iconClemens 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Di 02.08.05 10:14 
Problem beenden:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Di 02.08.05 10:58 
ausblenden 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
    // mach was
    sleep(100);
  end;
end;


procedure TForm1.OnCreate(Sender: TObject); // oder wann mans braucht
var tid: cardinal;
begin
  BeginThread(nil,0,@schleife,nil,0,tid);
end;


// für Textbildschirmanwendung

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