Namensräume
Varianten
Aktionen

std::clock

Von cppreference.com
< cpp‎ | chrono‎ | c
 
 
 
C-Stil Datums- und Zeitwerkzeuge
Funktionen
Zeitmanipulation
clock
Formatkonvertierungen
Konstanten
Typen
(C++17)
 
Definiert im Header <ctime>
std::clock_t clock();

Gibt die von dem Prozess seit Beginn einer implementierungsdefinierten Ära, die mit der Ausführung des Programms zusammenhängt, genutzte ungefähre Prozessorzeit zurück. Um den Rückgabewert in Sekunden umzurechnen, dividieren Sie ihn durch CLOCKS_PER_SEC.

Nur die Differenz zwischen zwei von verschiedenen Aufrufen von std::clock zurückgegebenen Werten ist aussagekräftig, da der Beginn der std::clock-Ära nicht mit dem Programmstart übereinstimmen muss.

Die Zeit von std::clock kann schneller oder langsamer als die Wanduhr vergehen, abhängig von den vom Betriebssystem dem Programm zugewiesenen Ausführungsressourcen. Wenn zum Beispiel die CPU von anderen Prozessen geteilt wird, kann die Zeit von std::clock langsamer als die Wanduhr vergehen. Wenn andererseits der aktuelle Prozess multithreaded ist und mehr als ein Ausführungskern verfügbar ist, kann die Zeit von std::clock schneller als die Wanduhr vergehen.

Inhalt

[bearbeiten] Rückgabewert

Bisher vom Programm genutzte Prozessorzeit.

  • Wenn die genutzte Prozessorzeit nicht verfügbar ist, wird (std::clock_t)(-1) zurückgegeben.
  • Wenn der Wert der genutzten Prozessorzeit nicht durch std::clock_t dargestellt werden kann, wird ein nicht spezifizierter Wert zurückgegeben.

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] Hinweise

Auf POSIX-kompatiblen Systemen bietet clock_gettime mit der Clock-ID CLOCK_PROCESS_CPUTIME_ID eine bessere Auflösung.

Der von clock() zurückgegebene Wert kann bei einigen Implementierungen überlaufen. Zum Beispiel wird bei einer solchen Implementierung, wenn std::clock_t ein vorzeichenbehafteter 32-Bit-Integer ist und CLOCKS_PER_SEC 1'000'000 beträgt, dieser nach etwa 2147 Sekunden (etwa 36 Minuten) überlaufen.

[bearbeiten] Beispiel

Dieses Beispiel demonstriert den Unterschied zwischen der clock()-Zeit und der Echtzeit.

#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <thread>
 
// The function f() does some time-consuming work.
void f()
{
    volatile double d = 0;
    for (int n = 0; n != 10000; ++n)
        for (int m = 0; m != 10000; ++m)
            d += d * n * m;
}
 
int main()
{
    const std::clock_t c_start = std::clock();
    auto t_start = std::chrono::high_resolution_clock::now();
    std::thread t1(f);
    std::thread t2(f); // f() is called on two threads
    t1.join();
    t2.join();
    const std::clock_t c_end = std::clock();
    const auto t_end = std::chrono::high_resolution_clock::now();
 
    std::cout << std::fixed << std::setprecision(2) << "CPU time used: "
              << 1000.0 * (c_end - c_start) / CLOCKS_PER_SEC << "ms\n"
              << "Wall clock time passed: "
              << std::chrono::duration<double, std::milli>(t_end - t_start) << '\n';
}

Mögliche Ausgabe

CPU time used: 1590.00ms
Wall clock time passed: 808.23ms

[bearbeiten] Siehe auch

konvertiert ein std::time_t-Objekt in eine textuelle Darstellung
(Funktion) [bearbeiten]
gibt die aktuelle Zeit des Systems als Zeit seit der Epoche zurück
(Funktion) [bearbeiten]
C-Dokumentation für clock