![]() |
anderen Delay als sleep
Hallo!
Ich habe ein Programm, das öfters bis zu 40 Sekunden wartet. Bisher habe ich dies über den sleep Befehl gemacht. Während dieser Phase ist der Zugriff auf das Programm aber ausgeschlossen weil es anscheinend viel daran rechnet. Gibt es eine andere Möglichkeit lange Delays zu produzieren? Mfg Xenonz |
Re: anderen Delay als sleep
Moin,
probier mal folgendes:
Delphi-Quellcode:
gruss
procedure Delay(const Milliseconds: DWord);
var FirstTickCount: DWord; begin FirstTickCount := GetTickCount; while ((GetTickCount - FirstTickCount) > Milliseconds) do begin Application.ProcessMessages; Sleep(0); end; end; [edit=alcaeus]HTML-Entitaet durch korrektes Zeichen ersetzt. Mfg, alcaeus[/edit] |
Re: anderen Delay als sleep
Das programm "rechnet" bei Sleep gar nix, sondern friert schlicht ein. Somit reagiert es in dieser Zeit auch nich auf eingaben. Am Geschicktesten is es wohl mit einem Timer zu arbeiten. Den solltest du standardmäßig in deiner Palette finden, es gibt aber auch viele Komponenten mit einem "verbesserten" Timer (z.B bei JVCL). Natürlich kannst du auch mit Threads arbeiten. Wenn du in einem anderen Thread Sleep aufrufst, wird das "Hauptprogramm" dadurch nich beeinflusst...
@MrKnogge: Diese Methode verbrennt doch massiv CPU Zeit oder? |
Re: anderen Delay als sleep
|
Re: anderen Delay als sleep
@MrKnogge: sleep(0) sollte niemals verwendet werden! Aufgrund von Prozessprioritäten kann es sonst weiterhin passieren, dass andere Threads nie ausgeführt werden.
Ausserdem solltest du bei deinem getTickCount gucken ob du dich nicht am Tag 59 (?) befindest (wo der cardinal auf 0 umspringt) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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