QueryPerformanceFrequency( )取得的值 |
答題得分者是:Cooky Kid
|
Just4U
初階會員 發表:38 回覆:56 積分:28 註冊:2002-03-27 發送簡訊給我 |
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
小弟手頭上剛好有QueryPerformanceFrequency這個API範例,
but...實在不太了解您的需求....
請看以下程式碼。
< class="code">
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{//將ComboBox中選項自設為1000000~21000000巨額數目
ComboBox1->Items->Clear();
for(int i=1;i<21;i )
{
double b = 1000000;
b *= i;
ComboBox1->Items->Add(AnsiString("計算 ") AnsiString(b)
AnsiString(" 數字相加"));
}
ComboBox1->ItemIndex = 9;
//先將Memo1字串清除
Memo1->Text = "";
}
//---------------------------------------------------------------------------
//按下Button1,則開始計算巨額數字相加的時間,並在Memo1中顯示高精度秒數
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//從ComboBox1選項,取得巨額數字,以供計算時間之用
AnsiString str = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
str = str.SubString(6,str.Length());
str = str.SubString(1,(str.Length()-9));
//Memo1->Text = str;//測試之用
//將擷取的字串轉成巨額變數
double dbl = str.ToDouble();
//64bit的整數變數
LARGE_INTEGER time1, time2, freq;
//在迴圈運算前,取得第一次高精度的時間,存入64bit的整數變數中
::QueryPerformanceCounter(&time1);
double a = 0, i=0;
//迴圈運算
for(;i<dbl;i )
a = i;
//在迴圈運算後,取得第二次高精度的時間,存入64bit的整數變數中
::QueryPerformanceCounter(&time2);
//將兩次時間相減,取得迴圈運算所費時間
__int64 passtime = time2.QuadPart - time1.QuadPart;
//取得系統每秒有多少的高精度頻率數目
::QueryPerformanceFrequency(&freq);
//計算出迴圈運算需要多少秒
float numSecs = (float)passtime / (float)freq.QuadPart;
//將結果顯示在Memo1中
Memo1->Lines->Add(AnsiString("迴圈變數:") AnsiString(i)
AnsiString(",相加結果:") AnsiString(a));
Memo1->Lines->Add(AnsiString("花費時間:") FloatToStr(numSecs)
AnsiString(" 秒"));
//仍由ComboBox取得焦點
ComboBox1->SetFocus();
}
//---------------------------------------------------------------------------
|
Just4U
初階會員 發表:38 回覆:56 積分:28 註冊:2002-03-27 發送簡訊給我 |
我是想為一個delay的函式得到一個較精確的基準時間, Win98/266MHz, Win98/400MHz
QueryPerformanceFrequency() = 1193180 Win2000/550MHz, WinXP/700MHz, WinXP/1.8GHz
QueryPerformanceFrequency() = 3579545 我的疑問是, 由上述測量值看來, QueryPerformanceFrequency()的值好像與CPU無關而與OS有關, 是這樣嗎? 可是照常理來說, 不是應該CPU越快, QueryPerformanceFrequency()的值會越大嗎?
引言: 小弟手頭上剛好有QueryPerformanceFrequency這個API範例, but...實在不太了解您的需求.... 請看以下程式碼。 >>< face="Verdana, Arial, Helvetica"> |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
據小弟所知--
QueryPerformanceFrequency 是依照cpu震盪頻率(tick)所取得的數值為基準,
(真是滿詭異...竟然有API可探觸到cpu震盪頻率.....) 小弟也很好奇的請教大大--
您也有在 550MHz, 700MHz, 1.8GHz, PC上裝win98?
跟266MHz, 400MHz, 數據一樣?
or 反過來..
在 266MHz, 400MHz, PC上裝winXP,2000?
跟550MHz, 700MHz, 1.8GHz, 數據一樣?
|
Just4U
初階會員 發表:38 回覆:56 積分:28 註冊:2002-03-27 發送簡訊給我 |
大大, 真高興你還在, 我用同一台PC(700MHz)分別在Windows 98/XP下測量QueryPerformanceFrequency()的值, 如下: Windows 98 : QueryPerformanceFrequency() = 1193180
Windows XP : QueryPerformanceFrequency() = 3579545 由上述測量值看來, 好像只與OS有關, 請問QueryPerformanceFrequency()的值代表的意義是什麼呢?
引言: 據小弟所知-- QueryPerformanceFrequency 是依照cpu震盪頻率(tick)所取得的數值為基準, (真是滿詭異...竟然有API可探觸到cpu震盪頻率.....) 小弟也很好奇的請教大大-- 您也有在 550MHz, 700MHz, 1.8GHz, PC上裝win98? 跟266MHz, 400MHz, 數據一樣? or 反過來.. 在 266MHz, 400MHz, PC上裝winXP,2000? 跟550MHz, 700MHz, 1.8GHz, 數據一樣? |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 大大, 真高興你還在, 我用同一台PC(700MHz)分別在Windows 98/XP下測量QueryPerformanceFrequency()的值, 如下: Windows 98 : QueryPerformanceFrequency() = 1193180 Windows XP : QueryPerformanceFrequency() = 3579545 由上述測量值看來, 好像只與OS有關, 請問QueryPerformanceFrequency()的值代表的意義是什麼呢?小弟對精密計時與API函式 QueryPerformanceFrequency的前因後果,沒法比以下兩個網頁解說的更完整,so...推薦大大到下列兩個網頁,應該對您有些幫助... >>]。筆者在主頻為 |
Just4U
初階會員 發表:38 回覆:56 積分:28 註冊:2002-03-27 發送簡訊給我 |
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 謝謝大大的幫忙!!! 就先這樣吧! 我再多看一些資料.sorry...沒法解決您的疑問... 小弟的想法是: 就以程式實作的角度, CPU的震盪頻率在不同OS下,有著穩定、可靠的數值基礎,可供programmer測量程式運算執行的時間; 顯然在CPU的等級不會影響不同OS(9X/1193180 and XP/3579545)下,只要programmer在計時前,確認OS是9X or XP,計算出來的總時間,運用簡單的換算,就可以得到可信賴的數值。並不會因為OS不同而出現無法對照的窘境。 另外, 以此函式(QueryPerformanceFrequency)為何在不同OS下,取得的震盪頻率不同數值? 小弟以為--若大大可以從M$文件中取得此函式的soure code,或許會解開此迷團吧... ************************* 在我們編程的時候常常需要一個精確的 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |