如何將微秒轉換爲毫秒並通過減法比較時間戳? 例子:轉換和微秒和毫秒比較
int t1 = (int)timeGetTime();
int t2 = (int)timeGetTime()+40;
// now t1 - t2 < 0 which means that t1 < t2.
,如果你除以1000的時間值,以微秒轉換成毫秒,這個邏輯將無法正常工作。
編輯
我想唯一的解決辦法是將所有的時間戳存儲在微秒。轉換爲毫秒只能在減去之後進行,以達到增量值。
如何將微秒轉換爲毫秒並通過減法比較時間戳? 例子:轉換和微秒和毫秒比較
int t1 = (int)timeGetTime();
int t2 = (int)timeGetTime()+40;
// now t1 - t2 < 0 which means that t1 < t2.
,如果你除以1000的時間值,以微秒轉換成毫秒,這個邏輯將無法正常工作。
編輯
我想唯一的解決辦法是將所有的時間戳存儲在微秒。轉換爲毫秒只能在減去之後進行,以達到增量值。
Windows中的時鐘計時器的分辨率限制在10毫秒左右,因此您將永遠無法獲得時間值達到微秒級的精度。
如果您的時間值來自其他能夠提供該分辨率的地方,那麼將這些值作爲微秒。乘以1000或將int除以1000不會給你更好的分辨率,它只會改變比較的比例。
關於臭名昭着的Raymond Chen的精確度和準確性的有趣聊天: http://blogs.msdn.com/oldnewthing/archive/2005/09/02/459952.aspx – Phill 2010-02-16 17:37:18
我知道,我的微秒值來自QueryPerformanceCounter。我想要的是以不同的單位進行計算,而不是微秒。厭倦了寫下所有這些零,如:time/1000000 ... – AareP 2010-02-16 19:57:05
好的,首先,即使你得到的值是微秒,但並不意味着該值對於Raymond Chen的文章來說是準確的。其次,我真的不明白你在問什麼,只是你想能夠轉換爲秒,而不喜歡輸入零值?使用一個常量。第三,如果你真的想這樣做,那麼只需使用double:double milliseconds =((double)microSeconds)/ 1000d(或C++等效或this)。儘管如此,我仍然認爲你可能會誤解這個潛在的問題。 – Phill 2010-02-17 16:27:07
您需要使用高分辨率定時器才能獲得微秒粒度時間。
您可以使用Windows API檢查您可以製作的粒度。
QueryPerformanceFrequency(& ticksPerSecond); QueryPerformanceCounter(& tick);
這兩個函數將幫助你這樣。看看MSDN articles瞭解更多。 :)
你是什麼意思,它「不會工作」? 400000微秒==(400000/1000)== 400毫秒。 400微秒== 0毫秒。也許你被整數師絆倒了? – 2010-02-16 17:13:45
你在哪裏有微秒的分辨率? timeGetTime()返回以毫秒爲單位的時間。 – Tim 2010-02-16 17:17:10
轉換爲更高分辨率是沒有意義的 - 它們都將以「000」結尾。你爲什麼這麼做? – Tim 2010-02-16 17:17:56