Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Alternative zu Sleep
n-regen - Mo 24.07.06 17:00
Titel: Alternative zu Sleep
Hallo!
Gibt es in Delphi eine Möglichkeit, wie man eine bestimmte Zeitspanne warten kann, ohne das Programm währenddessen zu freezen?
Fighter#1 - Mo 24.07.06 17:03
es gibt natürlich noch den Timer, aber der is eher nicht so genau.
n-regen - Mo 24.07.06 17:08
Das is das Problem:
ich will das in den quelltext:
Delphi-Quelltext
1: 2: 3:
| blablabla warte(1000) laberlaber |
Grendel - Mo 24.07.06 17:27
n-regen hat folgendes geschrieben: |
[...] warten kann, ohne [...] freezen? |
Nein, denn entweder wartet dein Programm, oder es "freezed" (manmanman...) nicht.
Du hast zwei Möglichkeiten. Entweder du arbeitest mit Threads oder aber einem solchen Konstrukt (ungestestet):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Warte(AMilliSeconds: Integer); var i: Integer; begin while i < AMilliSeconds do begin sleep(100); Application.ProcessMessages(); Inc(i, 100); end; end; |
Allerdings werden während dieses "Wartens" (genauer bei Application.ProcessMessages()) auch Benutzereingaben (Klick auf Abbrechen, Schließen, etc.) verarbeitet.
Bis neulich ...
n-regen - Mo 24.07.06 17:31
Hurra!
Das ist genau das, was ich brauche: das Programm arbeitet beim Warten weiter.
Fighter#1 - Mo 24.07.06 18:17
Wobei nachher die Zeit auch nicht ganz stimmt.
n-regen - Di 25.07.06 09:33
Es geht ja bloß um Sekunden - keine Milli-Sekunden!
n-regen - Di 25.07.06 09:56
Ich habs doch schon:
Grendel hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Warte(AMilliSeconds: Integer); var i: Integer; begin while i < AMilliSeconds do begin sleep(100); Application.ProcessMessages(); Inc(i, 100); end; end; |
|
Born-to-Frag - Di 25.07.06 10:20
Warum soll Sleep genauer als ein Timer sein? Ein Timer wäre doch genau das richtige oder eben ein Thread...
EDIT: Ach du benutzt ja immer noch Sleep.. naja alle 100ms Application.ProcessMessages ist ja auch nicht das wahre
greetz
Motzi - Di 25.07.06 10:57
n-regen hat folgendes geschrieben: |
Ich habs doch schon |
Ja, aber das was du hier machst ist ein so genanntes "Polling". Du fragst in einer Schleife immer wieder eine bestimmte Bedingung ab, und machst in der Zwischenzeit nichts anderes als darauf zu warten, dass diese auftritt (und fragst weiter ab). Dies belastet die CPU ganz schön (auch wenn das in deinem Fall durch das sleep halbwegs relativiert wird).
In dem Link den Gausi schon gepostet hat (
http://www.delphi-library.de/topic_Delay+resourcenschonender_23225.html) zeig ich eine Methode die dasselbe macht wie deine, dabei aber wesentlich resourcenschonender ist...
Gruß, Motzi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!