Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sekunden in Millisekunden für Sleep umwandeln (https://www.delphipraxis.net/191991-sekunden-millisekunden-fuer-sleep-umwandeln.html)

a.def 11. Mär 2017 13:39

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Hab jetzt eine andere Lösung gefunden. Die funktioniert.

Mavarik 11. Mär 2017 13:49

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Zitat:

Zitat von a.def (Beitrag 1363829)
Hab jetzt eine andere Lösung gefunden. Die funktioniert.

Dann zeig doch mal!

t.roller 11. Mär 2017 13:55

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Zitat:

Zitat von a.def (Beitrag 1363824)
Wie lasse ich den Sleep denn 500ms warten?

Delphi-Quellcode:
Zeit.QuadPart := 1 * (-10000000); // 1 Sekunde
Zeit.QuadPart := 1 * (-1000000); // 100 msec
Zeit.QuadPart := 1 * (-100000); // 10 msec
Zeit.QuadPart := 1 * (-10000); // 1 msec

himitsu 11. Mär 2017 14:49

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Nur mal zur Info: Es gibt ein paar Konstanten zur Zeitkonvertierung.
Zitat:

Delphi-Quellcode:
  HoursPerDay  = 24;
  MinsPerHour  = 60;
  SecsPerMin   = 60;
  MSecsPerSec  = 1000;
  MinsPerDay   = HoursPerDay * MinsPerHour;
  SecsPerDay   = MinsPerDay * SecsPerMin;
  SecsPerHour  = SecsPerMin * MinsPerHour;
  MSecsPerDay  = SecsPerDay * MSecsPerSec;

SysUtils


Laut Definition will SetWaitableTimer direkt den LARGE_INTEGER und keinen "QuadPart".

a.def 11. Mär 2017 16:55

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Ich mache das jetzt so

Delphi-Quellcode:
procedure TForm1.LongDelay(Milliseconds: Cardinal);
var
 FirstTickCount: DWord;
begin
 FirstTickCount := GetTickCount;

 while ((GetTickCount - FirstTickCount) < Milliseconds) do
  begin
   if not ThreadRunning then // nur ein Beispiel! (das hier steht hier nur, damit bei Programmende nicht unnötig hier gewartet wird)
    Exit;

   Application.ProcessMessages;
   Sleep(0);
  end;
end;

// Eingabe Nutzer: 600
var
 dTmp: Single;
 iMaxImgLifetime: Integer;
begin
 dTmp := (StrToIntDef(sSecondsInput, 600) / 20); // 20 = Anzahl Bilder
 iMaxImgLifetime := Round(dTmp * 1000); // Lebenszeit eines Bildes, bevor es versteckt wird

 // Thread
 while ... do
  begin
   LongDelay(iMaxImgLifetime);

   // Arbeite ...
  end;

himitsu 11. Mär 2017 16:59

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Nur keine Ahnung, warum jemand sich so viele Umstände macht anstatt das ganze Problem mit 2 Zeilen Code und einem TTimer zu lösen. :roll:

a.def 11. Mär 2017 17:01

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Weil ein Timer hier die GUI minimal blockieren würde. Statt einen Timer läuft es bei mir in einem TTask, ist doch kein Problem?

himitsu 11. Mär 2017 20:00

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Nein, es läuft nicht alles im Thread und wenn doch, dann hast du da einen schweren Designfehler im Programm, denn auf die VCL greift man ausschließlich vom Haupthtread drauf zu.
Der Task/Thread macht doch scheinbar nichts anderes, als sinnlos zu warten und dann das Bild zu änder.

Das Einzige, was hier "eigentlich" gemacht wird, ist alle x Sekunden in der GUI ein Bild zu ändern.
Das Ändern dauert immer gleich lang, egal ob es direkt im VCL-Thread von einem Timer ausgeführt wird
oder ob man es aus einem Thread synchronisiert im VCL-Thread macht.

a.def 11. Mär 2017 20:13

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Habs jetzt in einen Timer gepackt. Kein TTask mehr, kein Synchronize mehr, kein LongDelay mehr :stupid:
Das Interval ist die Zeit die vorher meine Sleep-Dauer war.
Im Timer ist bei jedem Durchgang ein ProcessMessages.

stahli 11. Mär 2017 20:24

AW: Sekunden in Millisekunden für Sleep umwandeln
 
Das ist gut so, wie auch himitsu empfohlen hat.

Aber das ProcessMessages ist sicherlich überflüssig.
Erstens wird es keinen positiven Effekt haben und zweitens kann es durchaus Probleme machen.

Was willst Du damit erreichen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Seite 2 von 4     12 34      

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