CLOCKS_PER_SEC是標準c的time.h頭函式中宏定義的一個常數,表示一秒鐘內CPU運行的時鐘周期數,用於將clock()函式的結果轉化為以秒為單位的量,但是這個量的具體值是與作業系統相關的。
基本介紹
- 中文名:CLOCKS_PER_SEC
- 所屬:標準c的time.h頭函式
- 屬性:宏定義的一個常數
- 特點:與作業系統相關
簡介,例子,
簡介
VC++6.0中該符號常量定義如下:
#define CLOCKS_PER_SEC 1000
但是在Macintosh系統中,我們可以看到這樣的一段定義:
#if __DARWIN_UNIX03#define CLOCKS_PER_SEC 1000000 /* [XSI] */#else /* !__DARWIN_UNIX03 */#include <machine/_limits.h> /* Include file containing CLK_TCK. */#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)#endif /* __DARWIN_UNIX03 */
因此,我們千萬不要認為這個常量就是1000,還應該查看一下自己的time.h檔案來確認一下。
此外,VC++6.0中把TC2.0中time.h下宏定義的常量CLK_TCK也宏定義成CLOCKS_PER_SEC,這樣TC2.0下值為18.2的CLK_TCK在VC6.0下值變為1000。該宏定義如下:
#define CLK_TCK CLOCKS_PER_SEC
CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每過千分之一秒(1毫秒),調用clock()函式返回的值就加1。
可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的運行時間。例如:
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
當然,你也可以用clock函式來計算你的機器運行一個循環或者處理其它事件到底花了多少時間:
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main(void)
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 測量一個事件持續的時間*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- ) ;/*注意這行後面有個分號*/
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;