2013-05-22 4 views
1

У меня проблема с использованием clock() в OSX. Я просто хочу показать время, прошедшее с момента запуска моей программы. Дело в том, что когда я разделяю структуру clock_t на CLOCKS_PER_SEC, я получаю странные результаты.clock() и CLOCKS_PER_SEC на OSX 10.7

Запуск моей программы в течение 10 секунд покажет 1.0. CLOCKS_PER_SEC установлен на 1 000 000 в моей системе.

Вот пример моего кода:

//startTime = clock() at the start of the program 
    //This is called in each program loop  
    elapsedTime = (double)(clock() - startTime)/CLOCKS_PER_SEC 

Если я делаю ElapsedTime * 10 я получить точное значение в секундах. Я не сплю и не жду вообще во время выполнения программы.

Любая помощь в понимании того, что происходит, будет действительно оценена.

EDIT:

Хорошо, я исправила бросок, но это не меняет тот факт, что если я запускаю программу в течение 10 секунд я получаю 1,0, 1 секунда составляет 0,1. Это то, чего я не понимаю. Мой CLOCKS_PER_SEC похож на CLOCKS_PER_TEN_SEC.

+0

Что вы делаете между двумя вызовами 'clock()'? –

+0

Просто рисуйте простую картинку с помощью SFML. (не задействовано ограничение fps). Я также показываю elaspedTime на каждом кадре, и я вижу, что каждая секунда добавляет около 0,1 к прошедшему времени. – Elendir

+0

Тогда, возможно, большая часть обработки выполняется графическим процессором и не подсчитывается 'clock()'. –

ответ

2

Я думаю, что ваше приведение не в том месте, поэтому вы получаете целочисленное деление. Попробуйте это:

elapsedTime = (double)(clock() - startTime)/CLOCKS_PER_SEC; 

EDIT:

отметить также, что в большинстве систем, clock() мер процессорного времени. Возможно, вы не используете столько процессорного времени, сколько считаете.

0

переместить бросок к внутренней части первой скобки:

elapsedTime = ((double)(clock() - startTime)/CLOCKS_PER_SEC) 

Теперь clock() -startTime становится в два раз, заставляя CLOCKS_PER_SEC быть значение с плавающей точкой тоже, и вы получите результат с плавающей точкой. В противном случае это целочисленное разделение, и вы получите только целочисленные результаты.