AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdigkeit mit Sleep()

Ein Thema von Shark99 · begonnen am 10. Aug 2010 · letzter Beitrag vom 26. Sep 2010
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#21

AW: Merkwürdigkeit mit Sleep()

  Alt 10. Aug 2010, 21:47
Leute ich will ja nicht rechthaberisch sein, aber ihr diskutiert jetzt schon seit ein paar Posts über ein Thema das zwar entfernt etwas mit der Ursprungsfrage zu tun hat, aber total überflüssig ist.

Der Threadersteller wollte eine Sekunde stoppen. Hat das versucht und 1160ms herausbekommen weil er aus Versehen bei der Anzeige 16% auf den eigentlichen Wert draufgeschlagen hat.

Dass GetTickCount() immer noch eine Ungenauigkeit von 10-20ms hat, ist zwar richtig - hat aber mit dem Ursprungsproblem nichts zu tun.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#22

AW: Merkwürdigkeit mit Sleep()

  Alt 11. Aug 2010, 00:53
Du hast zwar prinzipiell Recht, jedoch ist das Ursprungsproblem durchaus durch die Kombination beider Ursachen zu erklären, bzw. reicht die Korrektur der Rechnung allein nicht aus, um zum vom TE erklärten Ziel zu gelangen. Da finde ich es schon sinnvoll das so weit zu tragen, damit sich der TE nachher nicht wundert, warum diese eine Maßnahme dennoch nicht alles prima macht. Jede Wette wir würden das sonst in spätestens 1-2 Tagen in einem neuen Tread genau so tun
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#23

AW: Merkwürdigkeit mit Sleep()

  Alt 11. Aug 2010, 11:25
Fand die zusätzlichen Erklärungen sehr interessant, danke!
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Merkwürdigkeit mit Sleep()

  Alt 26. Sep 2010, 19:14
Vielleicht helfen dir folgende, wohl undokumentiere API-Funktionen weiter (bisher in keiner Delphi-Unit deklariert):

Code:
function NTQueryTimerResolution(CoarsestResolution : PULONG;
                                FinestResolution  : PULONG;
                                ActualResolution  : PULONG) : longint; stdcall; external 'ntdll.dll';

function NTSetTimerResolution(RequestedResolution : ULong;
                              Set_: Boolean;
                              ActualResolution : PULONG) : longint; stdcall; external 'ntdll.dll';



procedure SetTimerResolutionFinest;
var
  CoarsestResolution: ULONG;
  FinestResolution:   ULONG;
  ActualResolution:   ULONG;
  RequestedResolution: ULONG;
begin
  NtQueryTimerResolution(@CoarsestResolution, @FinestResolution, @ActualResolution);
  RequestedResolution := FinestResolution;
  NtSetTimerResolution(RequestedResolution, True, @ActualResolution);
end;

procedure SetTimerResolutionDefault;
var
  CoarsestResolution: ULONG;
  FinestResolution:   ULONG;
  ActualResolution:   ULONG;
  RequestedResolution: ULONG;
begin
  NtQueryTimerResolution(@CoarsestResolution, @FinestResolution, @ActualResolution);
  RequestedResolution := CoarsestResolution;
  NtSetTimerResolution(RequestedResolution, True, @ActualResolution);
end;

begin
  // maximale Resolution setzen
  SetTimerResolutionFinest;

  // make your job...

  // Timer wieder zurücksetzen !
  SetTimerResolutionDefault;
end;
Es sollte damit tatsächlich (evtl. annähernd) Sleep(1) = 1ms sein!
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Merkwürdigkeit mit Sleep()

  Alt 26. Sep 2010, 19:31
Wer windows-interne und vorallem undokumentierte APIs verwendet sollte aufpassen, denn diese NtXXX-Funktionen könnten sich auch mal von Windows-Version zu Windows-Version verändern.

PS: Auch Lazarus und der andere C++-Zeugs haben solche undokumentierten APIs bestimmt auch nicht standardmäßig drin.

PPS: Was solch ein Ändern in anderen Prozessen und im System anstellen kann, ist auch noch unbestimmt ... wer weiß was durch sowas nicht mehr richtig funktioniert.
Wenn man Pech hat, dann arbeitet dieser Befehl systemweit.

Abgesehn davon sollten die 1ms nicht wirklich ständig eingehalten werden, da jeder Thread nur ein gewisses Zeitfenster in den CPUs bekommt und dieses ist länger als 1ms, in welcher Zeit andere Prozesse arbeiten dürfen.
(es sei denn dieses verstellt auch noch die Prozesssteuerung vom Windows, welches noch mehr Probleme bereiten könnte)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: Merkwürdigkeit mit Sleep()

  Alt 26. Sep 2010, 19:58
Zitat:
Wenn man Pech hat, dann arbeitet dieser Befehl systemweit.
Das ist richtig, es wirkt sich systemweit aus.
Und es ist ebenfalls richtig, die Sache mit Vorsicht anzugehen, also nur genau da wo und genau so lange wie erforderlich mit dem 'getunten' Timer zu arbeiten.

Wir haben bisher keine negativen Auswirkungen auf sonstige Windows-Komponenten feststellen können, während der Laufzeit mit FinestResolution.
Der Erfolg kann aber durchaus situations- bzw. systemumgebungsabhängig sein (was für ein Wort!); wir hatten den Fall, dass zwei Programme das gleiche Funktionsmodul verwendeten, in dem die Timer-Resolution angepasst wurde. Eines der Programme läuft bisher immer noch sehr gut, das andere wollte plötzlich nicht mehr, bis diese Modifikation zurücjgenommen wurde...

Also ganz klar: selbst testen und beobachten (und wenn's geht, freuen )
Hartmut
*
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 10:52 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