Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeitverzögerung im Code! (https://www.delphipraxis.net/3216-zeitverzoegerung-im-code.html)

Florian 1. Mär 2003 08:03


Zeitverzögerung im Code!
 
Also, ich würde gern eine Verzögerung programmieren, um den Ablauf meines Programms zu verzögern.
Ich führe mehrere Anweisungen durch und möchte in jeder Anweisung
1 sec warten und dann unterhalb im Code weiter machen.

Problem: Mit dem Timer bekomm ich des irgendwie nicht hin, oder gibt es irgendeine function wie WaitFor(OnTimer) ?

Danke für eure Hilfe :-)

Alexander 1. Mär 2003 08:24

probier mal die Funktion sleep(1000) aus. Die zu wartene Zeit wird wie beim Timer in Millisekunden angegeben.

Daniel B 1. Mär 2003 09:00

Moin,

das Problem an Sleep ist, das dabei die ganze Anwendung, bzw. aktuelle Threads einfrieren.
Besser ist das oder das.

Grüsse, Daniel :hi:

phlux 1. Mär 2003 09:54

In dem 2ten Code ist ein Html zeichen drinne :mrgreen: hab ich so beim drübersehn entdeckt :wink:

Daniel B 1. Mär 2003 10:02

Zitat:

Zitat von phlux
In dem 2ten Code ist ein Html zeichen drinne :mrgreen: hab ich so beim drübersehn entdeckt :wink:

Stimmt, das ist ein < oder >.

Grüsse, Daniel :hi:

Alexander 1. Mär 2003 11:08

stimmt, daran dachte ich nicht, dass die ganze Anwendung einfriert. Tut es aber auch ;-)

nailor 1. Mär 2003 11:51

Zitat:

Zitat von Daniel B
Moin,

das Problem an Sleep ist, das dabei die ganze Anwendung, bzw. aktuelle Threads einfrieren.
Besser ist das oder das.

Grüsse, Daniel :hi:

Worin liegt eigentlich der Unterschied zwischen den beiden?

Daniel B 1. Mär 2003 11:56

Zitat:

Zitat von Nailor
Worin liegt eigentlich der Unterschied zwischen den beiden?

Gibt keinen. Bis auf die Variablennamen und Variablendeklarationen.
Ich fnde das sich das eine besser lesen lässt, ausserdem stimmt bei einem das >=. ;)

Grüsse, Daniel :hi:

Basti 1. Mär 2003 12:09

Delay
 
Hi,

es gibt eine procedure Delay, die du aber erst definineren musst:
(erstell einfach eine neue Unit und kopier das hier rein)

Delphi-Quellcode:
unit DelayUnit;

interface

uses Windows, Forms;

procedure Delay(MSecs: Integer);

implementation

procedure Delay(MSecs: Integer);
var
 FirstTickCount : LongInt;
begin
 FirstTickCount:=GetTickCount;
 repeat
 Application.ProcessMessages; {allowing access to other controls, etc.}
//Application.HandleMessage;
 until ((GetTickCount-FirstTickCount) >= LongInt(MSecs));
end;

end.


Danach kannst du in deinem Programm den Befehl "Delay" benutzten (natürlich musst du die Unit "DelayUnit" aufrufen.

Während diesem Befehl, der genauso wie Sleep funktioniert, nur das er das Programm nicht anhält, kannst du das Programm nur nicht beenden. Das ist der einzige Nachteil.
Viel Spaß damit

Gruß

Basti :coder:

[edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit]

Christian Seehase 1. Mär 2003 13:22

Moin Basti,

wobei Dein Delay fast auf's Bit genau identisch ist mit dem ersten Link von Daniel.
(einziger Unterschied: msecs statt Msecs)
;-)

janjan 1. Mär 2003 14:03

Ich würd eventuell GetTickCount durch TimeGetTime ersetzen, das bietet angeblich eine bessere Genauigkeit. Damit das klappt, muss man glaub ich die mmsystem in den uses-Abschnitt reinschreiben.

nailor 1. Mär 2003 14:29

du kennst doch unsere non-VCL-Verfechter :wink:

janjan 1. Mär 2003 15:05

Von wegen VCL:

http://msdn.microsoft.com/library/de...mfunc_2q3p.asp

Chewie 1. Mär 2003 17:36

Laut SDK braucht diese Funktion weniger Resourcen. Das sei der einzige Unterschied.

Snoop007 1. Mär 2003 20:04

irgenwie verstehe ich das nicht ?

dann könnte ich doch auch

Application.ProcessMessage;
sleep(1000);

verwenden, kommt doch aufs gleich raus, die anwendung erhält noch befehle und es wird 1 sec gewartet

Luckie 1. Mär 2003 21:38

Delphi-Quellcode:
Applicatio.PrecessMessages;
Sleep(10000);

Und jetz? Jetzt werden erst wieder alle Nachrichten abgearbeitet, aber dann reagiert das Programm auch für 10 Sekunden nicht mehr.

Christian Seehase 2. Mär 2003 01:07

Moin Snoop,

nein, das ist nicht dasselbe.
Sobald Sleep aufgerufen wird, wird der Thread aus dem heraus diese Funktion aufgerufen wird komplett angehalten, für die als Parameter angegebene Zeitspanne.
Macht man das im Hauptthread des Programmes, so "hängt" dieses solange.

Snoop007 2. Mär 2003 10:59

ja, danke ... ist ja irgendwie auch logisch ....

eintrag für mich : erst sammeln dann stammeln ;)

Chewie 2. Mär 2003 14:02

Zitat:

Zitat von Snoop007
irgenwie verstehe ich das nicht ?

dann könnte ich doch auch

Application.ProcessMessage;
sleep(1000);

verwenden, kommt doch aufs gleich raus, die anwendung erhält noch befehle und es wird 1 sec gewartet

Genau, es wird 1 Sekunde gewartet, und zwar in allen Threads. Mit Delay wird die Sekunde aber nur in dem Thread gewartet, der die Funktion aufruft.

Edit: Ach, verdammt, Sleep hält doch nur den aktuellen Thread an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz