Функция clock () всегда возвращает 0

Возможный дубликат:
C clock() функция просто возвращает ноль

Я запустил следующий код, чтобы проверить работу функции clock (). Работаю на Ubuntu 12.04.

#include <stdio.h>
#include <time.h>
#include <iostream>
using namespace std;


double diffclock(clock_t clock1,clock_t clock2)
{
double diffticks=clock1-clock2;
double diffms=(diffticks*10)/CLOCKS_PER_SEC;
return diffms;
}

int main()
{
string name;
int i;
clock_t begin=clock();
cout << "Hi what is your name? ";
getline(cin, name);
clock_t end=clock();
cout << "Time elapsed: " << double(diffclock(end,begin)) << " ms"<< endl;
return 0;
}

Но независимо от того, сколько времени я трачу на написание своего имени, прошедшее время всегда отображается как 0 мс.

Подскажите, в чем проблема?


person AvinashK    schedule 15.08.2012    source источник
comment
Кроме того, используя ваш код, я получаю (неверные) результаты, отличные от 0.   -  person Rollie    schedule 16.08.2012


Ответы (2)


clock() возвращает количество тиков ИСПОЛЬЗОВАНО С НАЧАЛА выполнения ПРОГРАММЫ. В этом конкретном примере нет необходимости получать значение clock_t begin.

Попробуйте распечатать значения begin и end и посмотрите, что они собой представляют. Вероятно, они оба равны 0 или близки к 0, поскольку ожидание ввода пользователя не использует время процессора.

В любом случае я рекомендую функцию time(), поскольку вам не нужна точность галочки. http://www.cplusplus.com/reference/clibrary/ctime/time/

person Dan Linus    schedule 15.08.2012
comment
Стандарт C допускает произвольные значения в начале программы, поэтому использовать абсолютное значение clock () некорректно. - person jfs; 16.08.2012

Я думаю, вам следует использовать функцию time (). Вот как это работает: http://asust.in/007D Вы просто вызываете его, и он возвращает количество секунд с эпохи Unix (1 января 1970 г.).

Функция clock () возвращает количество тактов часов с момента запуска программы. Здесь: http://asust.in/007E

person Topo    schedule 15.08.2012
comment
time () можно вернуть назад. Чтобы узнать прошедшие секунды, можно использовать разницу между последовательными вызовами clock_gettime (CLOCK_MONOTONIC). - person jfs; 16.08.2012