開發中經經常使用GetTickCount()函數來進行間隔時間的推斷。如推斷某一段代碼運作花了多少時間等,使用比較友善。
可是僅僅針對尋常的一些測試。近期開發一個服務程式時,也在代碼中用GetTickCount()來進行推斷,大體格式例如以下:
DWORD dwBegin = 0;
void Thread_Run(void)
{
while(TRUE)
{
DWORD dwNow = GetTickCount();
if (dwNow - dwBegin > 30) //second
{
....//
dwBegin = dwNow;
}
}
}
問題來了,GetTickCount()傳回的是DWORD類型,傳回的值代表程式從啟動到如今走過的時間。
DWORD類型的最大值為4294967295,折算成天是49.7。也就是說當服務程式連續跑了50天之後,再調用GetTickCount()的時候就會發生溢出。是以服務程式盡量不要用GetTickCount()。
假設要推斷間隔時間能夠用1970年以來的秒數差來計算。