- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试获取插入排序算法的运行时间。 MSDN说用CTime可以得到Elapsed Time。但我试了很多次,总是零分。我认为运行该算法的时间不可能为零。必须有一些错误或其他东西。有人可以帮助我吗?我在下面发布了我的代码:
#include <cstdlib>
#include <iostream>
#include <atltime.h>
using namespace std;
//member function
void insertion_sort(int arr[], int length);
int *create_array(int arrSize);
int main() {
//Create random array
int arraySize=100;
int *randomArray=new int[arraySize];
int s;
for (s=0;s<arraySize;s++){
randomArray[s]=(rand()%99)+1;
}
CTime startTime = CTime::GetCurrentTime();
int iter;
for (iter=0;iter<1000;iter++){
insertion_sort(randomArray,arraySize);
}
CTime endTime = CTime::GetCurrentTime();
CTimeSpan elapsedTime = endTime - startTime;
double nTMSeconds = elapsedTime.GetTotalSeconds()*1000;
cout<<nTMSeconds;
return 0;
}//end of main
最佳答案
CTime 并不意味着将时间精确到小于一秒。我认为您真正追求的是 GetTickCount
或 GetTickCount64
之类的东西。请参阅此 MSDN link .
GetTickCount function
Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.
如果使用 GetTickCount64
,您可以这样声明 startTime
和 endTime
:
uint64_t endTime, startTime, diffTime;
然后使用 GetTickCount64
以毫秒为单位检索时间,例如
startTime = GetTickCount64();
... do stuff ...
endTime = GetTickCount64();
diffTime = endTime - startTime;
当然,您可以随意使用 diffTime。
如果您不需要为超过一个月的时间计时,那么您可以简单地使用 GetTickCount
,返回的类型将是 uint32_t
而不是 uint64_t
如果您需要超过 1 毫秒的分辨率进行计时,并且您的计算机支持高分辨率计时器,则此代码可能有效:
LARGE_INTEGER freq;
double time_sec = 0.0;
if (QueryPerformanceFrequency(&freq))
{
LARGE_INTEGER start;
LARGE_INTEGER stop;
QueryPerformanceCounter(&start);
// Do Stuff to time Here
QueryPerformanceCounter(&stop);
time_sec = (uint64_t)(stop.QuadPart - start.QuadPart) / (double)freq.QuadPart;
}
else {
cout << "Your computer doesn't have a high resolution timer to use";
}
有关高性能计时器的信息可以在这个 MSDN entry 中找到
关于c++ - CTimeSpan 始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25954602/
我正在尝试获取插入排序算法的运行时间。 MSDN说用CTime可以得到Elapsed Time。但我试了很多次,总是零分。我认为运行该算法的时间不可能为零。必须有一些错误或其他东西。有人可以帮助我吗?
我在一个旧的 C++ MFC 程序中发现了一个错误,该程序计算给定日期相对于固定基准日期的偏移量(以天为单位)。由于某种原因,我们看到的结果有一个偏差,我追踪到原始程序员使用 CTimeSpan.Ge
我正在使用 CTime 和 CTimeSpan 并用它做简单的算术运算。在某些时候我正在做类似的事情 ... CTime someTime; CTimeSpan oneDay(1,0,0,0); re
我是一名优秀的程序员,十分优秀!