AW: Sekunden in Millisekunden für Sleep umwandeln
Hab jetzt eine andere Lösung gefunden. Die funktioniert.
|
AW: Sekunden in Millisekunden für Sleep umwandeln
Zitat:
|
AW: Sekunden in Millisekunden für Sleep umwandeln
Zitat:
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 |
AW: Sekunden in Millisekunden für Sleep umwandeln
Nur mal zur Info: Es gibt ein paar Konstanten zur Zeitkonvertierung.
Zitat:
Laut Definition will SetWaitableTimer direkt den LARGE_INTEGER und keinen "QuadPart". |
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; |
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:
|
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?
|
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. |
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. |
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. |
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