1. 程式人生 > >32位linux下使用gettimeofday獲取毫秒一直返回負數記錄

32位linux下使用gettimeofday獲取毫秒一直返回負數記錄

之前為了測試C++中程式碼執行消耗的時間,所以寫了這麼一個函式:

long long __getmstime()
{
	timeval tv;
	gettimeofday(&tv, NULL);
	return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

之前只是做減法算相差時間,今天突然做了一次輸出__getmstime的時間,發現居然是負數,

32位的機器使用long long型別不可能會結果溢位,於是我使用了double型別,依然如此,覺得很奇怪。

但是這種表現一定是溢位啊。

這時想到了C++的型別自動轉換,tv.tv_sec * 1000這裡的計算應該沒有進行型別轉換,之後會得到一個

溢位的負數,之後返回的時候雖然強轉成了Long long,但是已經悲劇了,誒。

最後改改:

long long __getmstime()
{
    	timeval tv;
    	gettimeofday(&tv, NULL);
    	return ((long long)tv.tv_sec) * 1000 + tv.tv_usec / 1000;
}

先把tv.tv_sec轉成long long型別,這樣就不會造成溢位了。

看來基本功是不紮實呀=。=