Timer與QueryPerformanceFrequency的使用? |
尚未結案
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
各位先進好,小弟根據站內文章和自己的實作發現Timer和QueryPerformanceFrequency做出的計時器是有差別的;現在遇上一個問題,假如小弟將滑鼠由A點移動到B點,可以使用QueryPerformanceFrequency的方式算出所花的時間,這時如果小弟透過Timer時間取樣,例如每0.1秒取樣一次,也就是每一秒會取出10個點,此時會發現所花的時間和取樣數不合了。
也就是假如由A點到B點用QueryPerformanceFrequency計時花了1.2多秒,理論上會收到12個點,可是在Timer收回來的點總數和這個都不相同。
不曉得各位先進可以提供什麼建議沒有?QueryPerformanceFrequency和QueryPerformanceCounter可以拿來每0.1秒記錄一次點座標嗎?懇請各位先進賜教了!謝謝!
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
|
Demo99
一般會員 發表:2 回覆:8 積分:2 註冊:2003-06-27 發送簡訊給我 |
用 QueryPerformanceFrequency 可以取得頻率(次/秒)
如此一來便可以知道每0.1秒是在第幾次的地方 類似以下的程式碼:
TLargeInteger L; TLargeInteger sTime, cTime; int freq; QueryPerformanceFrequency(&L); freq = L.QuadPart/10; //次/0.1秒 QueryPerformanceCounter(&sTime); //取得起始的計數值 int count = 0; while(1) { QueryPerformanceCounter(&cTime); //取得目前的計數值 if( int( (cTime.QuadPart-sTime.QuadPart)/freq ) == count ) { dosomething(); //get mouse position? count ; if(count >=120) //12sec.. break; } }這樣應該就可以達到類似Timer的效果了 |
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
|
GeorgeKu
中階會員 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |