2009-10-04 3 views
4

Это покажет, сколько секунд:Как подсчитать, сколько миллисекунд требуется для запуска моей программы?

#include <iostream> 
#include <time.h> 
using namespace std; 
int main(void) 
{ 
    int times,timed; 

    times=time(NULL); 
    //CODE HERE 

    timed=time(NULL); 
    times=timed-times; 
    cout << "time from start to end" << times; 
} 

Это покажет, сколько тиков:

#include <iostream> 
#include <time.h> 
using namespace std; 
int main(void) 
{ 
    int times,timed; 

    times=clock(); 
    //CODE HERE 

    timed=clock(); 
    times=timed-times; 
    cout << "ticks from start to end" << times; 
} 

Как получить миллисекунды?

ответ

10

См. Вопрос «Convert Difference between 2 times into Milliseconds» на переполнение стека.

Или используйте:

static double diffclock(clock_t clock1,clock_t clock2) 
{ 
    double diffticks=clock1-clock2; 
    double diffms=(diffticks)/(CLOCKS_PER_SEC/1000); 
    return diffms; 
} 
+0

Почему вы используете (CLOCKS_PER_SEC/1000)? Не CLOCKS_PER_SEC равно 1000, поэтому CLOCKS_PER_SEC/1000 = 1, и бессмысленно делиться на 1. – 123iamking

6

Если вы используете ОС Unix, как Linux или Mac OS X, вы можете перейти к командной строке и использовать линию

time call-program 

Временные раз команды, как долго выполнение любой командной строки принимает и отчеты это вам.

Я не знаю, есть ли что-то подобное для Windows, и как вы можете измерять милисекунды внутри программы C/C++.

3

Там в CLOCKS_PER_SEC макрос, чтобы помочь вам преобразовать клещей в миллисекундах.

Есть API-интерфейсы, совместимые с O/S, для получения таймеров с высоким разрешением.

Вы можете запускать свою программу более одного раза (например, 1000 раз) и измерять ее с помощью таймера низкого разрешения (например, некоторое количество секунд), а затем делить эту сумму на количество раз, когда вы ее запускали среднее время (с более высоким разрешением).

2

В Windows вы можете использовать GetTickCount, который находится в миллисекундах.

+0

«Разрешение функции GetTickCount ограничено разрешением системного таймера, который обычно находится в диапазоне от 10 миллисекунд до 16 миллисекунд ". – ChrisW

+0

@ChrisW: не было никакой спецификации, что разрешение должно быть выше. – JRL

+1

Вы правы; Я просто предупреждаю OP, что, хотя функция GetTickCount возвращает значение, измеренное в миллисекундах, оно неточно с точностью до миллисекунды: вместо этого оно точно соответствует ближайшему «тику», который он уже имел (и пытался уйти от) в его ОП. – ChrisW

1

Под Win32, вы можете получить доступ к таймеру высокого разрешения с использованием QueryPerformanceFrequency и QueryPerformanceCounter (ИМХО, что должно быть предпочтительным, возможно, с запасным вариантом для GetTickCount). Вы можете найти пример в разделе «Содержимое сообщества» в MSDN.

Смежные вопросы