我下面具體的說下,關於C語言獲取系統時間的幾種方式: 關於C語言獲取系統時間的幾種方式:
1 使用time_t time( time_t * timer ) 精確到秒
函數名: time
頭文件:time.h
函數原型:time_t time(time_t * timer)
功能: 獲取當前的系統時間,返回的結果是一個time_t類型,其實就是一個大整數,其值表示從CUT(Coordinated Universal Time)時間1970年1月1日00:00:00(稱為UNIX系統的Epoch時間)到當前時刻的秒數。
2 使用clock_t clock() 得到的是CPU時間 精確到1/CLOCKS_PER_SEC秒
clock()是C/C++中的計時函數,而與其相關的數據類型是clock_t。
對clock函數定義如下:clock_t clock(void) ;
簡單而言,就是該程序從啟動到函數調用佔用CPU的時間。這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鐘計時單元(clock tick)數,在MSDN中稱之為掛鐘時間(wal-clock);若掛鐘時間不可取,則返回-1。其中clock_t是用來保存時間的數據類型,在time.h文件中
include
#include <
#include
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;
printf( "%f seconds\n", duration );
system("pause");
}
上面我們看到時鐘計時單元的長度為1毫秒,那麼計時的精度也為1毫秒,那麼我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一些,從而使計時精度更高呢?通過嘗試,你會發現這樣是不行的。在標準C/C++中,最小的計時單位是一毫秒。
3 計算時間差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精確到毫秒
GetTickCount(),這個是windows裡面常用來計算程序運行時間的函數;
DWORD dwStart = GetTickCount();
//這裡運行你的程序代碼
DWORD dwEnd = GetTickCount();
則(dwEnd-dwStart)就是你的程序運行時間, 以毫秒為單位
這個函數只精確到55ms,1個tick就是55ms。
5 要獲取高精度時間,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
獲取系統的計數器的頻率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
獲取計數器的值
然後用兩次計數器的差除以Frequency就得到時間。
更詳細學習資料的在我的頭條文章仔細的看下,只是粗略的概述了一遍,當然更詳細具體的可以自己去找資料,當然也可以加我的群哈368282579,可以交流的,群內也有針對C語言的0基礎的新手資料,C語言和C++的項目資源也是很豐富的,希望對各位有所幫助哈
閱讀更多 java架構社區 的文章