關於 "使用CPU時間戳進行高精度計時" |
答題得分者是:RaynorPao
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
在本版有一篇文章 "使用CPU時間戳進行高精度計時", 不知各位有沒有依照方法去實作一下, 以下是我實作的結果: unsigned __int64 GetCycleCount()
{
__emit__(0x0F,0x31);
} void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString asTemp00, asTemp01;
unsigned __int64 ulT1, ulT2, ulT3, ulT4, ulT5;
ulT1 = GetCycleCount();
Sleep(500);
ulT2 = GetCycleCount();
Sleep(1000);
ulT3 = GetCycleCount();
ulT4 = ulT2 - ulT1;
ulT5 = ulT3 - ulT2;
asTemp00.sprintf("[%u]",ulT4);
asTemp01.sprintf("[%u]",ulT5);
Caption = asTemp00 asTemp01; } 如果上面的 sample code 沒錯的話, 執行一下您就會發現數據抖動的情形實在太誇張了, 請教各位有什麼方法可以改進嗎, 我總是覺得用 QueryPerformaceCount 比較好說, 附帶請教的是如何得到QueryPerformaceCount 一秒鐘有多少的正確值. 謝謝. Jesse Chan
------
Jesse Chan |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: QueryPerformaceCount 比較好說, 附帶請教的是如何得到QueryPerformaceCount 一秒鐘有多少的正確值. 謝謝.jessechan 你好: 你說的是像這樣嗎?? < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { LARGE_INTEGER liStartCounter; QueryPerformanceCounter(&liStartCounter); Label1->Caption=IntToStr(liStartCounter.QuadPart); LARGE_INTEGER liFrequency; QueryPerformanceFrequency(&liFrequency); Label2->Caption=IntToStr(liFrequency.QuadPart); LARGE_INTEGER liEndCounter; QueryPerformanceCounter(&liEndCounter); Label3->Caption=IntToStr(liEndCounter.QuadPart); char szBuf[256]={0}; double dSec=(double)(liEndCounter.QuadPart-liStartCounter.QuadPart)/ (double)liFrequency.QuadPart; sprintf(szBuf, "%.10f", dSec); Label4->Caption=szBuf; } -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2002/12/18 08:38:18
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
lgm55
一般會員 發表:14 回覆:34 積分:9 註冊:2004-03-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |