AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Sekunden in Millisekunden für Sleep umwandeln

Sekunden in Millisekunden für Sleep umwandeln

Ein Thema von a.def · begonnen am 11. Mär 2017 · letzter Beitrag vom 12. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2   
a.def
(Gast)

n/a Beiträge
 
#1

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 11:21
Genau das ist es was ich gesucht habe nur ich war zu dumm dafür das selber zu machen.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 11:57
Wenn Du die einen TEvent erzeugst...

Wait := TEvent.create(NIL,true,true,'');

Du kannst bei einem Wait.WaitFor(TimeOut) angeben wie lange ein Thread warten soll..
Bei einem Keypress oder was auch immer du machst um Dein Programm zu beenden, brauchst Du nur ein Wait.SetEvent; Terminate; aufrufen und schon ist dein Thread beenden.

Mavarik
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 13:20
Bzgl dieses Codes hier:

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
var
AlarmTimer : THandle;
Zeit : Large_Integer;
start, ende : Cardinal;
begin
  Memo1.lines.add('SetWaitableTimer: 1 sec Running');
  start:= GetTickCount;
AlarmTimer := CreateWaitableTimer(nil, False, nil);
CancelWaitableTimer(AlarmTimer); // goto Start
Zeit.QuadPart := 1 * (-10000000); // 1 Sekunde
SetWaitableTimer(AlarmTimer, Zeit.Quadpart, 0, nil, nil, False);
while WaitForSingleObject(AlarmTimer, 20) <> Wait_Object_0 do // Beispiel: 20msec
begin Application.ProcessMessages; end;
  end1:= GetTickCount;
  Memo1.lines.add(INTTOSTR(end1-start)+' msec');
  Memo1.lines.add('WaitableTimer: Ready');
end;
Wie lasse ich den Sleep denn 500ms warten?
Verstehe den irgendwie nicht so richtig.

Der folgende wäre mir deutlich lieber aber auf meine boolsche Prüfung reagiert er gar nicht! Caption := 'X'; wird auch nie ausgeführt wenn das drin steht.
Delphi-Quellcode:
procedure TForm1.LongDelay(Milliseconds: Integer);
var
 Tick: DWord;
 Event: THandle;
begin
 Event := CreateEvent(nil, False, False, nil);

 try
  Tick := GetTickCount + DWord(Milliseconds);

  while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
   begin
    if not bTimerRunning then
     Exit;

    Milliseconds := Tick - GetTickCount;
   end;
 finally
  CloseHandle(Event);
 end;
end;

Geändert von a.def (11. Mär 2017 um 13:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 13:34
Der folgende wäre mir deutlich lieber aber auf meine boolsche Prüfung reagiert er gar nicht! Caption := 'X'; wird auch nie ausgeführt wenn das drin steht.
Delphi-Quellcode:
procedure TForm1.LongDelay(Milliseconds: Integer);
var
 Tick: DWord;
 Event: THandle;
begin
 Event := CreateEvent(nil, False, False, nil);

 try
  Tick := GetTickCount + DWord(Milliseconds);

  while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
   begin
    if not bTimerRunning then
     Exit;

    Milliseconds := Tick - GetTickCount;
   end;
 finally
  CloseHandle(Event);
 end;
end;
Caption := 'X'; ?? wo?

Du musst das ganz natürlich in einem Thread machen...
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 13:39
Hab jetzt eine andere Lösung gefunden. Die funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 13:49
Hab jetzt eine andere Lösung gefunden. Die funktioniert.
Dann zeig doch mal!
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#7

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 13:55
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#8

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 14:49
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".
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Mär 2017 um 14:53 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#9

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 16:55
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#10

AW: Sekunden in Millisekunden für Sleep umwandeln

  Alt 11. Mär 2017, 16:59
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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