2 Stimmen

C GetTickCount (Windows-Funktion) in Zeit (Nanosekunden)

Ich teste einen von meinem Kollegen zur Verfügung gestellten Code und muss die Ausführungszeit einer Routine messen, die einen Kontextwechsel (von Threads) durchführt.

Was ist die beste Wahl, um die Zeit zu messen? Ich weiß, dass es hochauflösende Timer gibt, wie,

QueryPerformanceCounter
QueryPerformanceFrequency

aber wie kann ich übersetzen mit, dass Timer zu Milisekunden oder Nanosekunden?

3voto

Alex F Punkte 40874
LARGE\_INTEGER lFreq, lStart;
LARGE\_INTEGER lEnd;
double d;

QueryPerformanceFrequency(&lFreq);
QueryPerformanceCounter(&lStart);

/\* do something ... \*/

QueryPerformanceCounter(&lEnd);
d = ((doublel)End.QuadPart - (doublel)lStart.QuadPart) / (doublel)lFreq.QuadPart;

d ist das Zeitintervall in Sekunden.

1voto

gds03 Punkte 1301

Da die Operation, die ich ausführe, in der Größenordnung von 500 Nanos liegt, und die Zeitgeber keine Präzision haben, habe ich eine Lösung gefunden,

Ich speicherte die tatsächliche Zeit mit GetTickCount() - (Verwendet Präzision von ~ 12milis) und führt die Ausführung einer Route N_TIMES (Anzahl der Zeiten als Routine ausgeführt) als bleibt, bis ich etwas auf der Konsole drücken.

Berechnen Sie die Zeit erneut, und teilen Sie die Differenz durch N_TIMES, etwa so:

int statischer Zähler;

void routine() { // Operationen hier. Zähler++; }

int main(){
start <- GetTickCount(); handle <- createThread(....., routine,...);
resumeThread(handle);

getchar();

WaitForSingleObject(handle, INFINITE);

Elapsed = (GetTickCount() - start) * 1000000.0) / counter; printf("Nanos: %d", verstrichen); }

:)

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