Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Systemtimerroutine ermöglicht es dem Aufrufer in der Regel, eine absolute oder eine relative Ablaufzeit für einen Timer anzugeben. Beispiel: Siehe KeWaitForSingleObject, KeSetTimer oder KeDelayExecutionThread. Die Genauigkeit, mit der das Betriebssystem Ablaufzeiten messen kann, ist durch die Granularität der Systemuhr begrenzt.
Die Systemzeit wird auf jedem Tick der Systemuhr aktualisiert und ist nur auf den neuesten Tick genau. Wenn der Aufrufer eine absolute Ablaufzeit angibt, wird der Ablauf des Timers während der Verarbeitung des ersten Systemuhrstrichs erkannt, der nach der angegebenen Zeit auftritt. Daher kann der Timer bis zu einer Systemtaktperiode später als die angegebene absolute Ablaufzeit ablaufen. Wenn stattdessen ein Zeitgeberintervall oder eine relative Ablaufzeit angegeben wird, kann der Ablauf bis zu einem Zeitraum vor oder einem Zeitraum später als der angegebenen Zeit auftreten, je nachdem, wo genau die Start- und Endzeiten dieses Intervalls zwischen Systemuhr-Ticks liegen. Unabhängig davon, ob eine absolute oder relative Zeit angegeben wird, kann das Ablaufen des Timers möglicherweise erst später erkannt werden, wenn die Verarbeitung von Unterbrechungen für die Systemuhr durch die Verarbeitung von Unterbrechungen für andere Geräte verzögert wird.
Wenn der Aufrufer eine relative Ablaufzeit angibt, fügt die Timerroutine die aktuelle Systemuhrzeit zur angegebenen relativen Ablaufzeit hinzu, um die absolute Ablaufzeit zu berechnen, die für den Timer verwendet werden soll. Da die Systemzeit nur auf den neuesten Tick der Systemuhr genau ist, kann die berechnete Ablaufzeit bis zu einem Systemuhrzeitraum liegen, der vor der vom Aufrufer erwarteten Ablaufzeit liegt. Wenn eine angegebene relative Ablaufzeit nahe oder kleiner als der Systemuhrzeitraum ist, läuft der Timer möglicherweise sofort ab, ohne Verzögerung.
Eine mögliche Möglichkeit, kürzere Ablaufzeiten genauer zu unterstützen, besteht darin, die Zeit zwischen Systemuhr-Ticks zu verringern, aber dies wird wahrscheinlich den Stromverbrauch erhöhen. Darüber hinaus kann die Reduzierung der Systemtaktperiode möglicherweise nicht zuverlässig eine feinere Systemtakt-Granularität erzielen, es sei denn, die Verarbeitung von Unterbrechungen für die anderen Geräte auf der Plattform kann so garantiert werden, dass die Verarbeitung von Systemtakt-Unterbrechungen nicht verzögert wird.
Ab Windows 8 verwendet KeDelayExecutionThread eine präzisere Technik, um die absolute Ablaufzeit eines aufrufers angegebenen relativen Ablaufzeitpunkts zu berechnen. Um eine genauere Schätzung der aktuellen Systemzeit zu erhalten, verwendet die Routine den Systemleistungszähler, um die verstrichene Zeit seit dem letzten Takt der Systemuhr zu messen. Als Nächstes fügt die Routine diese genauere Schätzung der Systemzeit zur relativen Ablaufzeit hinzu, um die absolute Ablaufzeit zu berechnen. Die durch diese Technik berechnete absolute Ablaufzeit ist innerhalb eines Mikrosekunden genau. Daher läuft der Timer nicht ab, bevor die angegebene relative Ablaufzeit verstrichen ist. Der Timer kann bis zu einem Systemuhrzeitraum nach der angegebenen Zeit ablaufen und sogar später ablaufen, wenn die Unterbrechung des Systemtakts durch die Verarbeitungsunterbrechung für andere Geräte verzögert wird.
Wenn sich die Systemzeit vor Ablauf eines Timers ändert, ist ein relativer Timer nicht betroffen, aber das System passt jeden absoluten Timer an. Ein relativer Timer läuft immer nach der angegebenen Anzahl von Zeiteinheiten ab, unabhängig von der absoluten Systemzeit. Ein absoluter Timer läuft zu einer bestimmten Systemzeit ab, sodass eine Änderung der Systemzeit die Wartezeit eines absoluten Timers ändert.