CTimeSpan всегда получает ноль

Я пытаюсь получить время выполнения алгоритма сортировки вставки. MSDN сказал, что с помощью CTime можно получить истекшее время. Но я пробовал много раз и всегда получал ноль. Я думал, что это невозможно, что время запуска этого алгоритма равно нулю. Там должна быть какая-то ошибка или что-то еще. Кто-нибудь может мне помочь? Я разместил свой код ниже:

#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

1

Решение

CTime не предназначен для определения времени до разрешения менее одной секунды. Я думаю, что вы действительно после чего-то вроде GetTickCount или же GetTickCount64 , Смотрите этот MSDN ссылка на сайт .

Функция GetTickCount

Получает количество миллисекунд, прошедших с момента запуска системы, до 49,7 дней.

При использовании 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 запись

0

Другие решения


По вопросам рекламы [email protected]