[問題] MFC平台中Ontimer更新頻率的極限??

看板C_and_CPP作者 (meteor007)時間14年前 (2011/03/24 02:09), 編輯推噓4(4024)
留言28則, 6人參與, 最新討論串1/1
我使用VC2005的MFC平台做一個Ontimer的小測試 但是遇到一些問題 敘述如下: 1.使用一個SetTimer 利用兩個不同ID控制兩個Timer 2.第一個ID的更新頻率設定為1 第二個ID的更新頻率設定為500 Coding如下: 1.Settimer的部分: void CpracticeMFCView::OnSettimerSet1() { // TODO: 在此加入您的命令處理常式程式碼 SetTimer(HDTIMER_ID, UPDATE_RATE, NULL); SetTimer(HDTIMER_ID2, UPDATE_RATE2, NULL); } 2.Ontimer的部分: void CpracticeMFCView::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此加入您的訊息處理常式程式碼和 (或) 呼叫預設值 ofstream fout("c:\\gx111.txt",ios_base::app); if (nIDEvent==1) { aaa++; double fff=bbb/aaa; fout<<" "<<fff<<endl; } else { bbb++; } int ccc=0; //fout.close(); CView::OnTimer(nIDEvent); } 3.變數aaa bbb fff初始化過了 並且輸出成文字檔 測試更新頻率 但是從輸出的結果來看 更新頻率並不如預期有500倍的差距 就算把500改成50也一樣不能滿足 目前在我的電腦測出的極限是30倍左右...跟我的需求差很多 請問這是為什麼 是MFC平台的限制嗎?? 如果用Thread會比較好嗎?? 感謝 -- 賺錢才是真的 努力讀書只是晚幾年去賣雞排罷了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.218.104 ※ 編輯: meteor007 來自: 140.123.218.104 (03/24 02:24)

03/24 02:29, , 1F
找 timeBeginPeriod 試試
03/24 02:29, 1F

03/24 02:38, , 2F
感謝提供 不過沒用過 要再研究看看...
03/24 02:38, 2F

03/24 02:39, , 3F
請問timeBeginPeriod的好處是什麼? 和我用的有何不同?
03/24 02:39, 3F

03/24 03:02, , 4F
我比較好奇你需要 1ms 頻率的原因是什麼?
03/24 03:02, 4F

03/24 03:04, , 5F
不過回答一下你三樓的問題: 系統處理訊息有一定的週期
03/24 03:04, 5F

03/24 03:04, , 6F
這個函式可以把那個週期改小
03/24 03:04, 6F

03/24 03:04, , 7F
我的論文題目是力回饋裝置 更新頻率是1KHz 真夭壽
03/24 03:04, 7F

03/24 03:04, , 8F
03/24 03:04, 8F

03/24 03:05, , 9F
感謝 所以也是用 類似Settimer的東西控嗎?
03/24 03:05, 9F

03/24 03:05, , 10F
連結是錯的XD
03/24 03:05, 10F

03/24 03:06, , 11F
@_@ 我開起來怎麼就沒問題....
03/24 03:06, 11F

03/24 03:07, , 12F
又可以了...前幾次開都出現ERROR...真神奇...
03/24 03:07, 12F

03/24 03:07, , 13F
當然要注意的是不是每個系統都吃得到 1ms 這麼細...
03/24 03:07, 13F

03/24 03:08, , 14F
這還滿受硬體及OS影響的
03/24 03:08, 14F

03/24 03:08, , 15F
感謝分享 不過請問若是用執行緒的概念去做呢?
03/24 03:08, 15F

03/24 03:09, , 16F
我引用的是史丹佛的Source 他是用執行緒的方式寫的
03/24 03:09, 16F

03/24 03:09, , 17F
而且真的可以達到1KHz 甚至超過...TMD真神人...
03/24 03:09, 17F

03/24 06:05, , 18F
他有寫出他的演算概念嗎? 或者有分享部份codes?
03/24 06:05, 18F

03/24 07:38, , 19F
thread + HPET...之前做到4kHz都OK(但會卡在i2c那邊)
03/24 07:38, 19F

03/24 08:11, , 20F
有阿 有興趣的可以找chai3d 就有了
03/24 08:11, 20F

03/24 13:46, , 21F
看了一下code,它create一個ABOVE_NORMAL的thread polling
03/24 13:46, 21F

03/24 13:49, , 22F
hapicDevices,裡面用QueryPerformanceFrequency()比較是
03/24 13:49, 22F

03/24 13:51, , 23F
否>=0.0001才更新...
03/24 13:51, 23F

03/24 14:12, , 24F
但是我現在要把平台轉到MFC 並用VTK繪圖 同樣的方法
03/24 14:12, 24F

03/24 14:13, , 25F
在MFC不知道是否合用 所以才改成Ontimer
03/24 14:13, 25F

03/24 14:40, , 26F
RDTSC (Time Stamp Counter) 解析度應該又比 QueryPer..高
03/24 14:40, 26F

03/24 14:41, , 27F
但是好像更不穩?不常用,不知道 Query 的原理是什麼
03/24 14:41, 27F

03/24 14:41, , 28F
>MFC不知道是否合用 跟 MFC 沒關係,那 Windows 提供函數
03/24 14:41, 28F
文章代碼(AID): #1DYZTlaz (C_and_CPP)