Time.h : http://zh.wikipedia.org/zh-tw/Time.h
因為在計算P2P偵測流量必須要用到,因此稍微拜讀了一下
wiki就蠻詳盡的了 所以乾脆就貼上來
在"標準" C/C++函式庫裡 也就是 time.h 時間用clock()函數的精準度只有到 ms
若要精準到 微秒(us) 在linux 和win 有不同的做法
神奇的是 clock 在linux man page 查到的CLOCKS_PER_SEC = 1000000
也就是說每個 tick 的單位是 微秒(microsecond) us
但是在windows 的系統下用VS 查到的CLOCKS_PER_SEC =1000
所以單位是 毫秒 (millisecond) ms
關於這個問題再windows 下驗證過後是毫秒沒錯
在linux 我就沒有特別去驗證了 (我是懶惰鬼以後遇到再說XD)
若要計算的更精準一點 時間推算來到 微秒 (microsecond) us
參考win <Windows.h>
附上我自己寫的Code
getTickTime(LARGE_INTEGER *tickTime){
QueryPerformanceCounter(tickTime);
}
LONGLONG diffTime_us(LARGE_INTEGER startTime,LARGE_INTEGER endTime){ LARGE_INTEGER CUPfreq;
LONGLONG diffTime_us(LARGE_INTEGER startTime,LARGE_INTEGER endTime){ LARGE_INTEGER CUPfreq;
LONGLONG llLastTime;
QueryPerformanceFrequency(&CUPfreq);
llLastTime = 1000000 * (endTime.QuadPart - startTime.QuadPart) / CUPfreq.QuadPart;
return llLastTime;
return llLastTime;
}
int main(){
LARGE_INTEGER start,
end;getTickTime(&start);
Sleep(100);
getTickTime(&end);
diffTime_us(start,end);
return 0;
}
linux 就請man <sys/time.h> ,貼上轉錄來的source code當參考
#include <sys/time.h>
#include <stdio.h>
int main(){
struct timeval tv, tv2;
unsigned long long start_utime, end_utime;
gettimeofday(&tv,NULL);
start_utime = tv.tv_sec * 1000000 + tv.tv_usec;
usleep(1000);
gettimeofday(&tv2,NULL);
end_utime = tv2.tv_sec * 1000000 + tv2.tv_usec;
printf(" runtime = %llu\n", end_utime - start_utime );
}
一般來說標準涵式庫time.h 可以精準到秒、毫秒(ms)對大部分的情況就已經夠用了
針對特殊情況才會用到上面兩種方法
然而到底能不能精準到 us 其實最主要還是看硬體支不支援(大部分都是支援的)
linux 就請man <sys/time.h> ,貼上轉錄來的source code當參考
#include <sys/time.h>
#include <stdio.h>
int main(){
struct timeval tv, tv2;
unsigned long long start_utime, end_utime;
gettimeofday(&tv,NULL);
start_utime = tv.tv_sec * 1000000 + tv.tv_usec;
usleep(1000);
gettimeofday(&tv2,NULL);
end_utime = tv2.tv_sec * 1000000 + tv2.tv_usec;
printf(" runtime = %llu\n", end_utime - start_utime );
}
一般來說標準涵式庫time.h 可以精準到秒、毫秒(ms)對大部分的情況就已經夠用了
針對特殊情況才會用到上面兩種方法
然而到底能不能精準到 us 其實最主要還是看硬體支不支援(大部分都是支援的)