2010-02-16 215 views
1

如何將微秒轉換爲毫秒並通過減法比較時間戳? 例子:轉換和微秒和毫秒比較

int t1 = (int)timeGetTime();  
int t2 = (int)timeGetTime()+40; 
// now t1 - t2 < 0 which means that t1 < t2. 

,如果你除以1000的時間值,以微秒轉換成毫秒,這個邏輯將無法正常工作。

編輯

我想唯一的解決辦法是將所有的時間戳存儲在微秒。轉換爲毫秒只能在減去之後進行,以達到增量值。

+0

你是什麼意思,它「不會工作」? 400000微秒==(400000/1000)== 400毫秒。 400微秒== 0毫秒。也許你被整數師絆倒了? – 2010-02-16 17:13:45

+0

你在哪裏有微秒的分辨率? timeGetTime()返回以毫秒爲單位的時間。 – Tim 2010-02-16 17:17:10

+0

轉換爲更高分辨率是沒有意義的 - 它們都將以「000」結尾。你爲什麼這麼做? – Tim 2010-02-16 17:17:56

回答

1

爲什麼不將millisec值乘以1000以便以微秒進行比較?或者,也可以使用浮點數。

+1

時域數據的浮點類型通常是計數器指示的:時鐘既可以返回特定的時鐘,也可以不返回特定的時鐘,因此數據本質上是整數。只需使用足夠大的整數類型。 – dmckee 2010-02-16 17:29:34

+0

浮點數最終會溢出。整數無關緊要,因爲通常它們僅用於與其他整數時間值進行比較。 – AareP 2010-02-16 19:58:39

1

Windows中的時鐘計時器的分辨率限制在10毫秒左右,因此您將永遠無法獲得時間值達到微秒級的精度。

如果您的時間值來自其他能夠提供該分辨率的地方,那麼將這些值作爲微秒。乘以1000或將int除以1000不會給你更好的分辨率,它只會改變比較的比例。

+0

關於臭名昭着的Raymond Chen的精確度和準確性的有趣聊天: http://blogs.msdn.com/oldnewthing/archive/2005/09/02/459952.aspx – Phill 2010-02-16 17:37:18

+0

我知道,我的微秒值來自QueryPerformanceCounter。我想要的是以不同的單位進行計算,而不是微秒。厭倦了寫下所有這些零,如:time/1000000 ... – AareP 2010-02-16 19:57:05

+0

好的,首先,即使你得到的值是微秒,但並不意味着該值對於Raymond Chen的文章來說是準確的。其次,我真的不明白你在問什麼,只是你想能夠轉換爲秒,而不喜歡輸入零值?使用一個常量。第三,如果你真的想這樣做,那麼只需使用double:double milliseconds =((double)microSeconds)/ 1000d(或C++等效或this)。儘管如此,我仍然認爲你可能會誤解這個潛在的問題。 – Phill 2010-02-17 16:27:07

0

您需要使用高分辨率定時器才能獲得微秒粒度時間。

您可以使用Windows API檢查您可以製作的粒度。

QueryPerformanceFrequency(& ticksPerSecond); QueryPerformanceCounter(& tick);

這兩個函數將幫助你這樣。看看MSDN articles瞭解更多。 :)