Anwendung für eine bestimmte Zeit pausieren |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Mit der Funktion Sleep wird die Ausführung des aktuellen Threades unterbrochen. Als Parameter übergibt man die Anzahl der Millisekunden, die der Thread temporär unterbrochen werden soll.
begin
{ bei einer Singlethreaded-Anwendung würde
diese für etwa 1 Sekunde still stehen }
Sleep(1000);
end;
Wird Sleep im Hauptthread der Anwendung aufgerufen, so befindet sich die gesamte Anwendung anschließend im Ruhezustand und es werden in diesem Zeitraum weder Nachrichten noch Befehle abgearbeitet.Das bedeutet, dass die gesamte Anwendung still steht und nicht mehr reagiert.Gefährlich wird die ganze Sache, wenn andere Anwendungen mit der eigenen Botschaften austauschen und auf dessen Verarbeitung warten. Dies führt dann unweigerlich zum Deadlock und kann große Teile des Systemes lahmlegen, wenn die Anwendungen untereinander kommunizieren, sich aber im Wartezustand befinden. Um dieses Problem zu umgehen sollte man dafür sorgen, dass die Botschaftswarteschlange trotz Unterbrechnung abgearbeitet wird.Dieses kann man durch die Methode "ProcessMessages" des Applikationsobjektes durchführen.
procedure Delay(const Milliseconds: DWord);
var
FirstTickCount: DWord;
begin
FirstTickCount := GetTickCount;
while ((GetTickCount - FirstTickCount) < Milliseconds) do
Application.ProcessMessages;
end;
In diesem Beispiel hängt die Anwendung die übergebenen Millsekunden lang in der Schleife fest und arbeitet in dieser Zeit die Botschaftswarteschlange ab. Dies ist aber nur für sehr kurze Pausen geeignet, da ansonsten die CPU-Nutzung stark ansteigt.Ein besseres Ergebnis erreicht man mit folgendem Code:
procedure Delay(const Milliseconds: DWord);
var
FirstTickCount: DWord;
begin
FirstTickCount := GetTickCount;
while ((GetTickCount - FirstTickCount) < Milliseconds) do
begin
Application.ProcessMessages;
Sleep(0);
end;
end;
Durch den Einbau von Sleep(0) verzichtet der aktuelle Thread auf den Restbetrag der Zeitscheibe, die ihm durch den Kernel zur Verfügung gestellt wird. Diese Restzeit wird anderen Threads identischer Priorität zur Verfügung gestellt. Benötigt kein anderer Thread diese Rechenzeit, kehrt die Funktion sofort zurück.Hinweise zur Benutzung:Die Auflösung von Sleep unterscheidet sich zwischen den unterschiedlichen Betriebssystemen. Unter NT-basierenden Systemen werden etwa 10ms Sekunden garantiert, während es auf Systemen mit Win9x etwa 55ms sind.Des Weiteren muss man davon ausgehen, dass die übergebene Zeit nur die Mindestwartezeit ist. Deshalb sollte Sleep nicht zu Zeitmessungen verwendet werden.
- Laufende Anwendung beenden
- Verwendung von CreateProcess
- Herausfinden, ob ein bestimmtes Programm gerade läuft
- Mehrfachstart verhindern
- Programm vor dem Taskmanager verstecken
- Alle sichtbaren Fenster minimieren/wiederherstellen
- Ermitteln ob eine Exe-Datei läuft
- Auflisten aller Fenster
- Button klicken
- Beliebige Fenster minimieren, maximieren