Autor Beitrag
chillermiller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 30.05.10 15:25 
Hallo alles zusammen,

und zwar hab ich folgendes Problem. Beim Programmieren einer Stoppuhr kann ich während des Laufen mein Programm nicht schließen:
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:
procedure Aktualisierungsrate(ATime:Integer);
var
  Start : Integer;
begin
  Start:=GetTickCount;
  repeat
    Application.ProcessMessages;
  until GetTickCount-Start > ATime;
end;

procedure TForm1.StartClick(Sender: TObject);
begin
d:=0;
repeat
Label1.Caption:=InttoStr(Gettickcount);
Aktualisierungsrate(200);
until(d=1);
end;                        //Wenn ich während des Laufen des Programmes auf Beenden klicke, läuft die Stoppuhr einfach weiter.

procedure TForm1.BeendenClick(Sender: TObject);
begin
d:=1;
end;

Nur wenn ich die Stoppuhrzuerst beende, kann ich dann auch das Programm beenden.
Hat jemand vlt einen Vorschlag zur Verbesserung?
Ich möchte aber auf jeden Fall gettickcount verwenden, da onTimer zu ungenau ist.

grüße, der chillermiller

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am So 30.05.2010 um 18:46
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: So 30.05.10 15:31 
Packe deinen Quellcode doch bitte in die Delphi-Tags für das Syntax-Highlighting. ;)

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: So 30.05.10 18:23 
TTimer ist die lösung...
oder pack bei deiner Schleife in procedure Aktualisierungsrate ein Application.ProcessMessages rein
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 30.05.10 19:06 
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
oder pack bei deiner Schleife in procedure Aktualisierungsrate ein Application.ProcessMessages rein

Das wird nicht helfen. Der Grund, wieso sich das Programm nicht schliesst ist, dass der Programmfluss nicht mehr zurück zur Hauptschleife gelangt sondern in dem Pseudo-main-loop stecken bleibt. Du musst dort entweder zusätzlich Application.Terminated prüfen oder dein Design überdenken. Wenn die Geschwindigkeit des Timers ausreicht, dann verwende den. Ansonsten glaube ich habe ich mal ein Application.HandleMessage mit Timeout gesehen (blockiert bis zur nächsten Message oder bis Timeout abgelaufen ist). Alternativ mit Threads und Synchronize arbeiten.