Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi anderen Delay als sleep (https://www.delphipraxis.net/56061-anderen-delay-als-sleep.html)

Xenonz 31. Okt 2005 14:14


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

MrKnogge 31. Okt 2005 14:18

Re: anderen Delay als sleep
 
Moin,

probier mal folgendes:

Delphi-Quellcode:
procedure Delay(const Milliseconds: DWord);
var
  FirstTickCount: DWord;
begin
  FirstTickCount := GetTickCount;
  while ((GetTickCount - FirstTickCount) > Milliseconds) do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end;
end;
gruss

[edit=alcaeus]HTML-Entitaet durch korrektes Zeichen ersetzt. Mfg, alcaeus[/edit]

LoRd-MuldeR 31. Okt 2005 14:19

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?

Die Muhkuh 31. Okt 2005 14:20

Re: anderen Delay als sleep
 
http://www.delphipraxis.net/internal...ighlight=delay

Vjay 1. Nov 2005 11:49

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 06:05 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