Ausführungszeit von Software
-
Abend,
weiß jmd ob es eine Möglichkeit gibt, herauszubekommen wie lange meine Software, die ich programmiere mit VS, bereits ausgeführt wird? Gibt es da eine schöne Funktion (bin mir nicht sicher - aber ich schreib es mal hin, dass ich mit MFC programmiere - ob es was in der MFC dafür gibt).
Gruß
Bernd
-
Das Einfachste wäre die Funktion GetTickCount() beim Start auszuführen, einen Timer anzufordern und dann jeweils (GetTickCount()-Startwert)/1000 ausrechnen und du hast die Zeit in Sekunden.
-
Für die Zeit in Sekunden kannst du auch Funktionen aus
<ctime>benutzen.
-
clock (aus <ctime>) is doof, weil's nicht überall gleich implementiert ist.
Auf Windows bekommst du normalerweise die Zeit die seit Start des Prozesses vergangen ist.
Auf anderen Systemen kann es sein, dass du die CPU Zeit bekommst, die dein Prozess bisher verbraucht hat. Was sehr sehr viel weniger sein kann. (Oder auch mehr, wenn z.B. mehr als nur eine CPU vorhanden ist)
(Linux macht das soweit ich weiss so)-> lieber nicht verwenden
::GetTickCount() ist dagegen recht klar definiert, und eignet sich gut um herauszubekommen wie lange ein bestimmter Vorgang dauert. (Mit gewissen Einschränkungen, wie z.B. dass der Zähler alle 49,7 Tage überläuft, was je nach Anwendung sehr kurz sein kann.)
-
Soweit ich mich erinnere kann GetTickCount() falsche Ergebnisse liefern, wenn zwischenzeitlich die Taktfrequenz der CPU geändert wird (z.B. Intel Speedstep für die Mobile Prozessoren oder bei den I7 Prozessoren, wenn Kerne schlafen gelegt werden und die Taktfrequenz für die übrigen erhöht wird).
Zu Programmstart time(0) merken und dazu die Differenz bilden, damit hast du die Zeitspanne in Sekunden, seit dem das Programm gestartet wurde.
-
hustbaer schrieb:
...
Wenn man einmal beim Programmstart
clockaufruft und speichert, und dann zum Bestimmen der Programmlaufzeit die Differenz zwischen aktuellemclock-Wert und dem gespeicherten Wert vom Programmstart bildet, ist es ziemlich egal, wasclockgenau zurückgibt...
-
Tachyon schrieb:
hustbaer schrieb:
...
Wenn man einmal beim Programmstart
clockaufruft und speichert, und dann zum Bestimmen der Programmlaufzeit die Differenz zwischen aktuellemclock-Wert und dem gespeicherten Wert vom Programmstart bildet, ist es ziemlich egal, wasclockgenau zurückgibt...Du bekommst(wenn hustbaers Behauptung stimmt) aber Werte mit völlig unterschiedlicher Bedeutung. Entweder die verstrichene Realzeit oder die verstrichene CPU-Zeit.
-
SeppJ schrieb:
...
Den Zeitbezug bekommt man doch über
CLOCKS_PER_SEC. Wenn man die Zeit in Sekunden haben will, muss man eh dadurch dividieren. Eigentlich funktioniert das ziemlich gut, egal, wasclocknun genau zurück gibt.
-
Tachyon schrieb:
SeppJ schrieb:
...
Den Zeitbezug bekommt man doch über
CLOCKS_PER_SEC. Wenn man die Zeit in Sekunden haben will, muss man eh dadurch dividieren. Eigentlich funktioniert das ziemlich gut, egal, wasclocknun genau zurück gibt.???
Ob
Sleep(1000); bzw sleep(1);
100cs vergangene Zeit oder 0cs verbrauchte Prozessorzeit zurückgibt, ist doch nicht durch CLOCKS_PER_SEC definiert.
-
Ja, da ist was dran...