Frage

Ich brauche zu messen, in C ++ unter Linux (und anderen Unix-ähnlichen Systemen), die CPU (nicht Wanduhr) Zeit durch eine lange Berechnung genommen, also verwende ich Uhr (). Problem:. Auf 32-Bit-Systemen, diese umschlingt nach etwa 2000 oder 4000 Sekunden

Was ist die empfohlene Abhilfe für dieses?

War es hilfreich?

Lösung

Sie möchten getrusage verwenden, die die folgende Struktur füllt:

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    ...
};

Zur Vervollständigung struct timeval:

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

Wie immer finden Sie in der Manpage für Details (man getrusage)

Andere Tipps

Haben Sie die Präzision benötigen von clock() zur Verfügung gestellt? Wenn nicht, können Sie time() zweimal verwenden und die Differenz übernehmen:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

EDIT: time() misst die Echtzeit (nicht CPU-Zeit) als litb in seinem Kommentar darauf hingewiesen, aber so tut clock(). Wenn Sie die CPU-Zeit messen wollen, sollten Sie litb Rat und Verwendung getrusage() folgen.

Ein weiteres mögliches Verfahren ist gettimeofday zu verwenden () zweimal, wie es ms Genauigkeit zurück.

die Zeit auf wiederkehrender Basis holen und auch jedes Mal ein Multiplikator Variable int erhöhen rollt über?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top