7 Stimmen

Android(Linux) Betriebszeit mit CLOCK_MONOTONIC

Nach Angaben von Referenz für Android-Entwickler uptimeMillis() gibt die Anzahl der Millisekunden seit dem Start zurück, ohne Berücksichtigung der im Tiefschlaf verbrachten Zeit . Ich habe die im uptimeMillis() in meinem Code und es ist ungefähr so.

struct timespec t;
t.tv_sec = t.tv_nsec = 0;
clock_gettime(CLOCK_MONOTONIC, &t);
return (int64_t)(t.tv_sec)*1000000000LL + t.tv_nsec;

Soviel ich weiß CLOCK_MONOTONIC zählt von einigen unbestimmter Punkt linear einschließlich der Schlafzeit.

Hier sind meine Zweifel.

  1. Si CLOCK_MONOTONIC beinhaltet die Schlafzeit, wie kommt es uptimeMillis() es nicht berücksichtigt? Wenn mein Verständnis falsch ist und CLOCK_MONOTONIC den Schlaf nicht berücksichtigt, was sollte ich dann verwenden, um die Systembetriebszeit einschließlich Schlaf zu erhalten?

  2. Was ist Tiefschlaf? Wird der Leerlauf der CPU als Tiefschlaf bezeichnet?

  3. Was ist der Wert von unbestimmter Punkt unter Linux? Können Sie freundlicherweise im Code angeben, wo diese Uhr gestartet wird?

10voto

janneb Punkte 33959
  1. CLOCK_MONOTONIC hält an, wenn das System angehalten wird. Einige Leute hielten dies für einen Fehler, und in der Folge gab es Patches für das Hinzufügen einer CLOCK_BOOTTIME-Uhr: https://lwn.net/Articles/428176/ . Ich weiß nicht, ob diese Patches bereits in den Mainline-Kernel aufgenommen worden sind. CLOCK_BOOTTIME ist in ndk-9c - es hat nur 2,5 Jahre gedauert ;) - Wojciech

  2. Aussetzen, denke ich.

  3. IIRC eine bestimmte Zeit vor dem Hochfahren. Den genauen Wert finden Sie, wenn Sie sich mit dem Kernel-Quellcode beschäftigen. Andererseits ist der ganze Punkt, dass es nicht spezifiziert ist, dass sie sich jederzeit ändern kann, weshalb es mir unklug erscheint, mich auf sie zu verlassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X