![]() |
while schleife all 10 interationen mit einer Pause (asu TIMER)
Hallo leute,
ich habe eine Repeat ... until loop und möchte alle 10 Durchläufe eine Pause von 3 sec machen. die Pause möchte ich via timer definieren. Hat wer ein Bsp oder Rat wie man das machen kann? DANKE mfg Walter |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Guten Morgen
durchtlauf mod 10 = 0 dann Pause Grüße Klaus |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Was ist denn so schwer daran?
* Zeit messen und speichern * warten bis aktuelle Zeit zu gemessener Zeit mehr/mindestens 10 Sekunden enspricht ** dann die neue aktuelle Zeit speichern oder * Zeit Messen + 10 Sekunden und speichern * warten bis aktuelle Zeit zu gemessener kleiner als gespeicherte ** dann die neue aktuelle Zeit + 10 Sekunden speichern
Delphi-Quellcode:
T := GetTickCount; // oder eine andere Zeitfunktion
while True do begin if Integer(GetTickCount - T) > 10 * MSecPerSec then begin // Integer wegen eventuellem Überlauf, wenn der Rechner mehr als 48 Tage läuft T := GetTickCount; Sleep(10 * MSecPerSec); end; ... end; |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Falls das Zielsystem Windows ist und der Umgang mit Delphi's Timer unerwünscht ist, wie wäre es mit dem Windows Timer? Per
![]() |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Ich verstehe nicht, wofür der Timer benötigt wird, wenn klar ist, dass alle 10 Durchläufe pausiert werden soll.
Die Länge der Pause lässt sich auch beim
Delphi-Quellcode:
definieren. Dafür benötigt man keinen Timer.
Sleep
|
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
Zitat:
|
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
|
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
|
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
@KodeZwerg:
Dass Sleep den Prozess einfriert, weiß ich. :wink: Zitat:
Zitat:
Wenn in der Schleife kein Application.ProcessMessages, kommt ein Timer sowieso nicht zum Zug, wenn ich mich richtig erinnere. Ein Timer ist schließlich kein Thread. Ich denke, dass wir hier mehr Input von Walter benötigen. |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
wenn das so ist, nehme ich meine aussage natürlich zurück und entschuldige mich für diese aussage. |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var T : LongWord; begin T := GetTickCount; // oder eine andere Zeitfunktion while True do begin if Integer(GetTickCount - T) > 10 * 1000 then begin // Integer wegen eventuellem Überlauf, wenn der Rechner mehr als 48 Tage läuft T := GetTickCount; Sleep(10 * 1000); end; end; end; |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Eigentlich würde ich gern mal nachsehn ob/was die mit dem Sleep da grade für ein Verbrechen begehen ... wenn ich's mal schaffe 10.4 installiert zu bekommen. :wall:
Weil wenn die wirklich da Sleep durch ![]() |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Das sagt die 10.4 Hilfe:
Delay program execution for a specified number of milliseconds. Sleep pauses program executions as specified by the milliseconds parameter. Under Windows, Sleep is just a link to the Sleep function in the API system Wer traut aber schon der Hilfe :dancer2: |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Ich habe nochmal in meinen Archiven geforstet nach einem Sleep() Ersatz ohne das der MainThread dabei einfriert und bin auf diese Perle gestoßen:
Delphi-Quellcode:
In Verbindung mit Delphi Timer bzw Iterations-Zähler sollte das Thema erfolgreich gelöst sein, hoffe ich jedenfalls :-)
procedure Delay(Milliseconds: Integer);
{by Hagen Reddmann} var Tick: DWORD; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWORD(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickCount; end; finally CloseHandle(Event); end; end; |
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Zitat:
Delphi-Quellcode:
meinen Button1 klicke, dann schläft mein Hauptthread während 60 Sekunden (Form reagiert nicht mehr auf Mausklicks etc.) - wenn ich im Windows Task Manager nachsehe, dann steht dort sehr kurz nach dem Button1-Klick "Keine Rückmeldung".
procedure TForm36.Button1Click(Sender: TObject);
begin sleep( 60000 ); end; Das war bis jetzt doch in jedem Delphi und jedem Windows so (?). Rasch gecheckt mit Delphi 10.4 und Microsoft Windows [Version 10.0.19042.421]. Winapi.Windows:
Delphi-Quellcode:
procedure Sleep; external kernel32 name 'Sleep';
|
AW: while schleife all 10 interationen mit einer Pause (asu TIMER)
Ich denke mal das war ein Missverständnis das mkinzler meine Aussage dementierte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 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