Calculates the wall-clock time used by the calling process.


clock_t clock( void );

Return Value

The elapsed time since the CRT initialization at the start of the process, measured in CLOCKS_PER_SEC units per second. If the elapsed time is unavailable or has exceeded the maximum positive time that can be recorded as a clock_t type, the function returns the value (clock_t)(-1).


The clock function tells how much wall-clock time has passed since the CRT initialization during process start. Note that this function does not strictly conform to ISO C, which specifies net CPU time as the return value. To obtain CPU times, use the Win32 GetProcessTimes function. To determine the elapsed time in seconds, divide the value returned by the clock function by the macro CLOCKS_PER_SEC.

Given enough time, the value returned by clock can exceed the maximum positive value of clock_t. When the process has run longer, the value returned by clock is always (clock_t)(-1), as specified by the ISO C99 standard ( and ISO C11 standard ( Microsoft implements clock_t as a long, a signed 32-bit integer, and the CLOCKS_PER_SEC macro is defined as 1000. This gives a maximum clock function return value of 2147483.647 seconds, or about 24.8 days. Do not rely on the value returned by clock in processes that have run for longer than this amount of time. You can use the 64-bit time function or the Windows QueryPerformanceCounter function to record process elapsed times of many years.


Routine Required header
clock <time.h>

For additional compatibility information, see Compatibility.


// crt_clock.c
// This sample uses clock() to 'sleep' for three
// seconds, then determines how long it takes
// to execute an empty loop 600000000 times.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Pauses for a specified number of milliseconds.
void do_sleep( clock_t wait )
   clock_t goal;
   goal = wait + clock();
   while( goal > clock() )

const long num_loops = 600000000L;

int main( void )
   long    i = num_loops;
   clock_t start, finish;
   double  duration;

   // Delay for a specified time.
   printf( "Delay for three seconds\n" );
   do_sleep( (clock_t)3 * CLOCKS_PER_SEC );
   printf( "Done!\n" );

   // Measure the duration of an event.
   start = clock();
   while( i-- )
   finish = clock();
   duration = (double)(finish - start) / CLOCKS_PER_SEC;
   printf( "Time to do %ld empty loops is ", num_loops );
   printf( "%2.3f seconds\n", duration );
Delay for three seconds
Time to do 600000000 empty loops is 1.354 seconds

See also

Time Management
difftime, _difftime32, _difftime64
time, _time32, _time64