C++ c++;代码执行计时器返回0,需要以毫秒为单位输出

C++ c++;代码执行计时器返回0,需要以毫秒为单位输出,c++,time,execution,C++,Time,Execution,我正试图找出如何对部分程序的执行进行计时,但当我使用以下代码时,我得到的结果是0。我知道那不可能是对的。我正在递归计时的代码实现了一个很大的int数组。如何获取执行程序所需的时间(以毫秒为单位) //opening input file and storing contents into array index = inputFileFunction(inputArray); clock_t time = clock();//start the clock //this is what ne

我正试图找出如何对部分程序的执行进行计时,但当我使用以下代码时,我得到的结果是0。我知道那不可能是对的。我正在递归计时的代码实现了一个很大的int数组。如何获取执行程序所需的时间(以毫秒为单位)

//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;
//打开输入文件并将内容存储到数组中
索引=inputFileFunction(inputArray);
时钟时间=时钟()//启动时钟
//这是需要计时的
mergeSort(inputArray,0,索引-1);
//获得差异
时间=时钟()-时间;
双毫秒=双(时间)/时钟每秒*1000;

std::cout您可以使用C++11中的chrono库。以下是如何修改代码:

#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;
#包括
//...
自动启动=标准::时钟::稳定时钟::现在();
//做你想做的事
自动结束=标准::时钟::稳定时钟::现在();
自动持续时间ms=std::chrono::duration\u cast(结束-开始);

std::cout您可以使用C++11中的chrono库。以下是如何修改代码:

#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;
#包括
//...
自动启动=标准::时钟::稳定时钟::现在();
//做你想做的事
自动结束=标准::时钟::稳定时钟::现在();
自动持续时间ms=std::chrono::duration\u cast(结束-开始);

如果你是在OSX上开发的,苹果的这个可能会很有用。它包含的代码片段应该可以提供您所需的时间分辨率。

如果您是在OSX上开发的,这可能会很有用。它包含的代码片段应能提供您所需的计时分辨率。

clock()
只有秒精度(在32位系统上,它可以每36分钟包装一次),因此如果
mergeSort()
运行不到1秒,这就解释了为什么会得到0的结果。对于您正在尝试的内容,您需要使用更高精度的计时器,例如来自
clock\u gettime()
,甚至是特定于操作系统的API。
clock()
只有秒精度(在32位系统上,它可以每36分钟包装一次),因此如果
mergeSort()
运行不到1秒,这就解释了为什么结果为0。对于您正在尝试的内容,您需要使用更高精度的计时器,例如来自
clock\u gettime()
,甚至是特定于操作系统的API。抱歉,在cout的最后一行中,您需要的是durationMS.count()而不是durationMS谢谢您的帮助。当我实现您的代码时,虽然它仍然给我0的输出:(你认为它的运行时间不到1微秒吗?也许可以尝试
纳秒
而不是
duration\u cast
中的微秒?@grigor我认为你是对的。我增加了递归合并排序必须经过的数据的大小,因此它需要更长的时间,最终显示的不是0。有没有比这更小的数据n毫微秒?很少有时钟可以解析为纳秒。C++允许你指定纳秒,因为为什么不?几乎没有花费什么,你不必重写标准的一部分。抱歉,在最后一行的CUT中,你需要DurTimes。而不是DurationMs感谢您的帮助。当我实现您的代码时,尽管它仍然为我提供了0的输出:(你认为它的运行时间不到1微秒吗?也许可以尝试
纳秒
而不是
duration\u cast
中的微秒?@grigor我认为你是对的。我增加了递归合并排序必须经过的数据的大小,因此它需要更长的时间,最终显示的不是0。有没有比这更小的数据n毫微秒?很少有时钟可以分解为纳秒。C++允许你指定纳秒,因为为什么不?几乎没有花费,而且你不必在稍后重写标准的一部分。