2016-08-08 2 views
0

Я пытаюсь выяснить, как выполнить часть части моей программы, но когда я использую следующий код, все, что я когда-либо получаю, это 0. Я знаю это не может быть прав. Код, который я использую, рекурсивно реализует mergesort большого массива int. Как получить время, необходимое для выполнения программы в миллисекундах?C++ код выполнения таймер возврата 0, требуется вывод в миллисекундах

//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()' имеет только вторую точность (и на 32-битной системе он может обертываться каждые 36 минут), поэтому, если 'mergeSort()' занимает менее 1 секунды для запуска, это объясняет, почему вы получаете результат 0. Для того, что вы пытаетесь, вам нужно использовать таймер с более высокой точностью, например, от 'clock_gettime()' или даже API, специфичный для ОС. –

ответ

6

Вы можете использовать библиотеку хроно в C++ 11. Вот как вы можете изменить код:

#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

Извините, что в последней строке cout вам требуется durationMS.count() вместо longMS – grigor

+0

благодарю вас за помощь. когда я реализовал ваш код, хотя он все еще дает мне результат 0 :( – anna

+0

Как вы думаете, он работает менее чем за 1 микросекунду? Возможно, попробуйте «наносекунды» вместо микросекунд в 'duration_cast'? – grigor

0

Если вы разрабатываете на OSX, это blog post от Apple, может быть полезным. Он содержит фрагменты кода, которые должны дать вам требуемое временное разрешение.

Смежные вопросы