Die verstrichene Zeit für die Ausführung eines C-Programms

8

Ich würde gerne wissen, welche Zeilen von C-Code zu einem Programm hinzugefügt werden sollen, so dass es mir die Gesamtzeit angibt, die das Programm zum Ausführen benötigt. Ich denke, es sollte eine Zählerinitialisierung nahe dem Anfang von main und einer nach dem Ende der Hauptfunktion geben. Ist der richtige Header clock.h ?

Vielen Dank ...

Update Ich habe eine Win XP-Maschine. Wird am Anfang des Programms nur clock() am Anfang und ein weiteres clock() hinzugefügt? Dann kann ich den Zeitunterschied schätzen. Ja, du hast recht, es ist time.h .

Hier ist mein Code:

%Vor%

Einige Fehler mit MVS2008:

%Vor%

und es geht um 28 Fehler. Beachten Sie, dass ich keine Fehler / Warnungen ohne Ihre Uhrcodes habe.

NEUESTE NACHRICHTEN: Ich habe leider keine gute Antwort hier bekommen. Aber nach einer Suche auf Google funktioniert der Code. Hier ist es:

%Vor%

Prost

Update am 10. April: Hier ist eine bessere Lösung dank "JustJeff"

%Vor%

Es funktioniert sowohl mit MVS2008 als auch mit Borland C ++ builderX von 2003.

    
yCalleecharan 07.04.2010, 09:46
quelle

6 Antworten

1

Wenn Sie in Windows arbeiten und Objekte in den Mikrosekunden messen möchten, untersuchen Sie QueryPerformanceCounter () und QueryPerformanceFrequency (). Auf vielen Systemen können diese die vollen Prozessor-Taktperioden auflösen, das dritte eines nano zweiten Zeugs, und ich glaube nicht, dass ich es jemals grober als 3,5795 MHz gesehen habe, immer noch unter einer Mikrosekunde.

Sie rufen QueryPerformanceFrequency () auf, um zu ermitteln, wie viele Zählungen pro Sekunde der Zähler zählt. Rufen Sie dann QueryPerformanceCounter () vor dem Testcode und anschließend erneut auf. Delta die zwei Lesungen von QPC und dividiere durch den Zeitraum von QPF und Sie erhalten die verstrichene Zeit zwischen den zwei QPC-Aufrufe. Wie so ...

%Vor% Offensichtlich greifen diese auf ein Hardware-Zählgerät zu, das an einen Systemoszillator auf der Hauptplatine gebunden ist. In diesem Fall sollten sie keinen Jitter durch Software-Belastung erleiden. Die Auflösung hängt von Ihrem System ab.

FOLGE NACH

Hier ist ein sehr einfaches vollständiges Programm, das die Schnittstelle demonstriert:

%Vor%

Für etwas so einfaches wie das ist es schneller, die IDE zu überspringen, speichern Sie es einfach in einer foo.c-Datei und (unter der Annahme MS VS 2008) verwenden Sie die Befehlszeile

%Vor%

um es zu bauen. Hier ist die Ausgabe auf meinem System:

%Vor%     
JustJeff 07.04.2010, 23:42
quelle
6

Auf Unix-Systemen (wie ich glaube) gibt der Befehl time mit dem Namen Ihres Programms als Befehlszeilenargument Auskunft über die Ausführungszeit des Programms. Beachten Sie, dass dies die Ausführungszeit des gesamten Programms misst. Wenn Sie nur einen Teil testen müssen, fügen Sie time.h hinzu und verwenden Sie die Clock-Funktion, mehr oder weniger wie folgt:

%Vor%

Damit erhalten Sie die Zeit in Millisekunden (beachten Sie den / 1000.0 -Teil). Wenn du Sekunden möchtest, entferne / 1000.0 . Wenn Sie einfache Clock-Ticks wollen, die genauer sein werden, machen Sie function_time a clock_t und ersetzen Sie die function_time = ... -Zeile durch:

%Vor%

Um das ganze Programm zeitlich festzulegen, schlage ich vor, eine Funktion namens _main() oder so etwas zu machen, all Ihren programmbezogenen Code von main() (nicht den Timing-Code!) in diese Funktion zu verschieben und von main() aus aufzurufen. . Auf diese Weise wird klarer, was der Timing-Code ist und was der Rest des Programms ist.

    
Javier 07.04.2010 09:47
quelle
3

Wenn Sie eine Gesamtmenge für Ihr Programm benötigen, dann in der Linux-Konsole:

%Vor%

Sie können time.h auch in Ihrem Code verwenden.

%Vor%     
Draco Ater 07.04.2010 09:57
quelle
3

Sie können die Funktion clock() (in <time.h> ) verwenden, wenn Sie einen Block Code testen möchten, oder das Programm time auf * nix, wie ein anderer Beantworter vorgeschlagen hat. ZB

%Vor%

Für die Uhr müssen Sie den Unterschied zwischen zwei Prüfpunkten subtrahieren. ZB

%Vor%

Aktualisieren

In Bezug auf Ihre neuen Fehler können Sie Code und Deklarationen in VC nicht mischen. Sie dürfen keine Funktionen aufrufen und dann Variablen deklarieren. Deklarieren Sie alle Ihre Vars an der Spitze, oder kompilieren Sie mit C ++ - Modus.

    
Alex Budovski 07.04.2010 09:48
quelle
1

Sie möchten wahrscheinlich time.h und die Funktion clock() .

    
Amber 07.04.2010 09:48
quelle
0

Sie können GetTickCount auch versuchen. Uhr funktioniert auch gut. Aber ich denke, die Uhrwerte ändern sich, wenn ein anderer Prozess oder ein anderer die Systemzeit manuell ändert, während die GetTickCount-Werte davon nicht betroffen sind.

    
Jay 07.04.2010 10:17
quelle

Tags und Links