2016-08-08 61 views
0

Ich versuche herauszufinden, wie die Ausführung eines Teils meines Programms Zeit, aber wenn ich den folgenden Code verwenden, alles, was ich jemals zurück 0 ist. Ich weiß das kann nicht stimmen. Der Code, den ich rekursiv bin, implementiert Mergesort eines großen Arrays von Ints. Wie bekomme ich die Zeit, um das Programm in Millisekunden auszuführen?C++ Codeausführung Timer gibt 0 zurück, benötigt Ausgabe in Millisekunden

//opening input file and storing contents into array 
index = inputFileFunction(inputArray); 

clock_t time = clock();//start the clock 

//this is what needs to be timed 
newRecursive.mergeSort(inputArray, 0, index - 1); 

//getting the difference   
time = clock() - time; 

double ms = double(time)/CLOCKS_PER_SEC * 1000; 

std::cout << "\nTime took to execute: " << std::setprecision(9) << ms << std::endl; 
+2

'clock()' hat nur zweite Genauigkeit (und auf einem 32bit-System kann es alle 36 Minuten wickeln), wenn 'mergeSort()' dauert weniger als 1 Sekunde zu laufen, würde das erklären, warum Sie ein Ergebnis von erhalten 0. Für das, was Sie versuchen, müssen Sie einen höherpräzisen Timer verwenden, z. B. von 'clock_gettime()', oder sogar eine OS-spezifische API. –

Antwort

6

Sie können die Chrono-Bibliothek in C++ 11 verwenden. Hier ist, wie Sie Ihren Code ändern können:

#include <chrono> 
//... 
auto start = std::chrono::steady_clock::now(); 
// do whatever you're timing 
auto end = std::chrono::steady_clock::now(); 
auto durationMS = std::chrono::duration_cast<std::chrono::microseconds>(end - start); 
std::cout << "\n Time took " << durationMS.count() << " ms" << std::endl; 
+0

Entschuldigung, in der letzten Zeile von cout brauchst du durationMS.count() anstelle von durationMS – grigor

+0

danke für deine Hilfe. Wenn ich Ihren Code implementiert, aber es gibt immer noch eine Ausgabe von 0 :( – anna

+0

Glauben Sie, es läuft in weniger als 1 Mikrosekunde? Vielleicht versuchen "Nanosekunden" statt Mikrosekunden in 'duration_cast'? – grigor

0

Wenn Sie auf OSX entwickelst, diese blog post von Apple nützlich sein kann. Es enthält Code-Snippets, die Ihnen die benötigte Zeitauflösung geben sollen.