Как получить системное время в C++?

Фактически, я пытаюсь вычислить время, необходимое для выполнения функции в моей программе. Итак, я использую логику, чтобы получить системное время, когда я вызываю функцию, и время, когда функция возвращает значение, а затем, вычитая значения, я получаю время, необходимое для завершения. Так что, если кто-нибудь может сказать мне какой-нибудь лучший подход или просто как получить системное время в экземпляре, это было бы неплохо.

Ответов (5)

Решение

Ваш вопрос полностью зависит от того, какую систему вы используете. У каждой системы есть свои функции для получения текущего времени. Чтобы узнать, как долго работает система, вам нужно получить доступ к одному из «счетчиков производительности с высоким разрешением». Если вы не используете счетчик производительности, вы обычно ограничены точностью до микросекунд (или хуже), что почти бесполезно при профилировании скорости функции.

В Windows вы можете получить доступ к счетчику с помощью функции QueryPerformanceCounter (). Это возвращает произвольное число, которое отличается для каждого процессора. Чтобы узнать, сколько тиков в счетчике == 1 секунда, вызовите QueryPerformanceFrequency ().

Если вы кодируете на платформе, отличной от Windows, просто используйте счетчик производительности Google и систему, в которой вы кодируете, и он должен сообщить вам, как вы можете получить доступ к счетчику.

Изменить (пояснение)
Это С ++, просто включите windows.h и импортируйте "Kernel32.lib" (похоже, моя гиперссылка была удалена, ознакомьтесь с документацией по адресу: http://msdn.microsoft.com/en-us/library /ms644904.aspx ). Для C# можно использовать класс System.Diagnostics.PerformanceCounter.

Вы можете использовать time_t

Под Linux попробуйте gettimeofday() разрешение микросекунды или clock_gettime() разрешение наносекунды.

(Конечно, реальные часы могут иметь более грубое разрешение.)

В некоторых системах у вас нет доступа к заголовку time.h. Таким образом, вы можете использовать следующий фрагмент кода, чтобы узнать, сколько времени требуется вашей программе для выполнения с точностью до секунд.

void function()
{
time_t currentTime;
time(&currentTime);
int startTime = currentTime;

   /* Your program starts from here */


  time(&currentTime);
  int timeElapsed = currentTime - startTime;

  cout<<"It took "<<timeElapsed<<" seconds to run the program"<<endl;



}

Подход, который я использую для синхронизации своего кода, - это функция time (). Он возвращает вам одно числовое значение, представляющее эпоху, что упрощает вычисление части вычитания.

Соответствующий код:

#include <time.h>
#include <iostream>

int main (int argc, char *argv[]) {

int startTime, endTime, totalTime;

startTime = time(NULL);

/* relevant code to benchmark in here */

endTime = time(NULL);

totalTime = endTime - startTime;

std::cout << "Runtime: " << totalTime << " seconds.";

return 0;
}

Имейте в виду, что это время пользователя. Что касается CPU, смотрите ответ Бена.