Вычисление промежутка времени между операциями в c ++ - PullRequest
2 голосов
/ 25 мая 2011

Программа является промежуточным ПО между базой данных и приложением. Для каждого доступа к базе данных я больше всего рассчитываю продолжительность времени в миллисекундах. Пример ниже использует TDateTime из библиотеки Builder. Я должен, насколько это возможно, использовать только стандартные библиотеки c ++.

AnsiString TimeInMilliseconds(TDateTime t) {
      Word Hour, Min, Sec, MSec;
      DecodeTime(t, Hour, Min, Sec, MSec);
      long ms = MSec + Sec * 1000 + Min * 1000 * 60 + Hour * 1000 * 60 * 60;
      return IntToStr(ms);
  }
  // computing times
   TDateTime SelectStart = Now();
   sql_manipulation_statement();
   TDateTime SelectEnd = Now();

Ответы [ 2 ]

7 голосов
/ 25 мая 2011

В Windows и POSIX-совместимых системах (Linux, OSX и т. Д.) Вы можете рассчитать время в 1 / CLOCKS_PER_SEC (отметки времени) для вызова, используя clock(), найденное в <ctime>. Возвращаемым значением этого вызова будет время, прошедшее с момента запуска программы в миллисекундах. Два вызова clock() могут затем быть вычтены друг из друга для вычисления времени выполнения данного блока кода.

Так, например:

#include <ctime>
#include <cstdio>

clock_t time_a = clock();

//...run block of code

clock_t time_b = clock();

if (time_a == ((clock_t)-1) || time_b == ((clock_t)-1))
{
    perror("Unable to calculate elapsed time");
}
else
{
    unsigned int total_time_ticks = (unsigned int)(time_b - time_a);
}

Редактировать: вы не сможете напрямую сравнивать время от POSIX-совместимой платформы с платформой Windows, потому что в Windows clock() измеряет время настенных часов, где, как и в системе POSIX, оно измеряет прошедшее время процессора. Но это функция стандартной библиотеки C ++, и для сравнения производительности между различными блоками кода на одной платформе она должна соответствовать вашим потребностям.

4 голосов
/ 25 мая 2011

В Windows вы можете использовать GetTickCount (MSDN) , который даст количество миллисекунд, прошедших с момента запуска системы. Используя это до и после вызова, вы получаете количество миллисекунд, на которое этот вызов прошел.

DWORD start = GetTickCount();
//Do your stuff
DWORD end = GetTickCount();
cout << "the call took " << (end - start) << " ms";

Edit: Как упоминал Джейсон, Clock (); было бы лучше, потому что это не относится только к Windows.

...