![]() |
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 :-) |
probier mal die Funktion sleep(1000) aus. Die zu wartene Zeit wird wie beim Timer in Millisekunden angegeben.
|
|
In dem 2ten Code ist ein Html zeichen drinne :mrgreen: hab ich so beim drübersehn entdeckt :wink:
|
Zitat:
Grüsse, Daniel :hi: |
stimmt, daran dachte ich nicht, dass die ganze Anwendung einfriert. Tut es aber auch ;-)
|
|
Zitat:
Ich fnde das sich das eine besser lesen lässt, ausserdem stimmt bei einem das >=. ;) Grüsse, Daniel :hi: |
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] |
Moin Basti,
wobei Dein Delay fast auf's Bit genau identisch ist mit dem ersten Link von Daniel. (einziger Unterschied: msecs statt Msecs) ;-) |
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.
|
du kennst doch unsere non-VCL-Verfechter :wink:
|
|
Laut SDK braucht diese Funktion weniger Resourcen. Das sei der einzige Unterschied.
|
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 |
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. |
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. |
ja, danke ... ist ja irgendwie auch logisch ....
eintrag für mich : erst sammeln dann stammeln ;) |
Zitat:
Edit: Ach, verdammt, Sleep hält doch nur den aktuellen Thread an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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