Question

I'm trying to see how much time cost execute some code in a thread. But clock() is returning 0.

This is the code:

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

int begin, end;
float time_spent;

clock_t i,j;
struct timeval tv1;
struct timeval tv2;

for(i = 0; i<6; i++)
{

begin = clock();

// Send Audio Data
....

gettimeofday(&tv1,NULL);

usleep(200000);   // Wait 200 ms

gettimeofday(&tv2,NULL);

printf("GETTIMEOFDAY %d\n", tv2.tv_usec-tv1.tv_usec);  // Time using date WORKING

end = clock() - begin;

// Store time
...


printf ("It took me %d clicks (%f seconds).\n",begin,((float)begin)/CLOCKS_PER_SEC);
printf ("It took me %d clicks (%f seconds).\n",end,((float)end)/CLOCKS_PER_SEC);

time_spent = (((float)end) * 1000.0 / ((float)CLOCKS_PER_SEC)); // Time using clock BAD

printf("\n TIME %dms|%dms|%fms|%d\n",begin,end, time_spent,CLOCKS_PER_SEC);

}



return 0;
}

But I get 0 clicks all time. I think usleep is not waiting 200 ms exactly, so I need to calculate how much time cost the function to encode audio using ffmpeg with synchronization.

Was it helpful?

Solution

I think the problem is that you're using the clock() function.

The clock function determines the amount of processor time used since the invocation of the calling process, measured in CLOCKS_PER_SEC of a second.

So for example:

clock_t start = clock();
sleep(8);
clock_t finish = clock();
printf("It took %d seconds to execute the for loop.\n",
  (finish - start) / CLOCKS_PER_SEC);

This code will give you a value of 0. Because the code was not using the processor, it was sleeping. This code however:

long i;
clock_t start = clock();
for (i = 0; i < 100000000; ++i)
  exp(log((double)i));
clock_t finish = clock();
printf("It took %d seconds to execute the for loop.\n",
  (finish - start) / CLOCKS_PER_SEC);

Will give you a count of 8seconds, because the code was using the processor the whole time.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top