• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            毫秒級計時器

            今天繼續(xù)編寫,基于框架的效果編輯器,修正了部分BUG后。。就想把。渲染窗口掛到MFC的窗口上。。。做為整個編輯器的一個子窗口打開。。這次。。。也比較方便。。也便于以后修改。以前掛接渲染窗口時。是使用settime來進行定時刷新渲染窗口,原來就感覺到刷新比較慢。但是因為查看MSDN。。。上講。。SetTime是毫秒級。。。最低精確到1毫秒。。。1秒=1000毫秒。我為了保證窗口UI的正常使用。一般設置為20毫秒。。為什么不用線程咧。因為渲染窗口一般會與其它信息存在交互。。單純渲染線程。。在處理互斥時。。。效率會慢到無法用言語來表達。。。1000/20=50。。每秒50的fps。。足可以應付簡單的渲染需求了。但是在今天的測試中。。動態(tài)調整動畫的FPS時。。。確發(fā)現。當FPS超過每秒20的范圍后。。動畫就不再有任何變化了,郁悶。。。然后。。就輕易的推翻了自己寫的一切。。。使用線程。。渲染。。。。因為渲染紋理是從一個模板LIST中。。。獲得。。。立刻就開始徘徊在。。加鎖。。。。。巨慢。。。不加鎖。。。異常的圍城中。。。。在多方思索無果后。。。。忽然覺得SetTime不應該會如此慢的。。。。然后。。。放棄線程。。。去實際測試了一下。。。發(fā)現了問題:

            SetTime雖然MSDN上說可以最低設置到一毫秒,但實際上測試只能精確到53毫秒左右,然后google上查詢。。。有了答案。windows 以經限定了Settimer()的精度是55ms。。。就是所謂的1000/55==18.2 ..因為98系統(tǒng)是根據時間中斷反饋,而時間中段每秒最多18.2次,雖然2000的系統(tǒng)據說沒有此限制。。但在我XP的系統(tǒng)下測試。。。精度依舊。應該是為了保證系統(tǒng)兼容。。所以將SetTime精度設定在最高的范圍。。如果這樣換算。。。也就和我的問題基本吻合。。。。SetTime(1)的情況下。。實現是55毫秒觸發(fā)一次,也就是每秒18.2幀。。。。18的FPS。。。啥都玩不轉了。而且WM-TIME消息 在系統(tǒng)的優(yōu)先級為極低。很容易被拋棄。。渲染窗口最少要保證在20毫秒觸發(fā)一次。。也就是FPS50的情況下。。才可以保證動畫等效果的連續(xù)性。。怎么辦。。。怎么辦。。。。繼續(xù)google。。。毫秒級記時器。。。。。終于被我找到了。。。。。好幾種解決的方法,對了。。。sleep的精度是30MS。。。以后要注意。。一下:

            一.GetTickCount()函數,該函數的返回值是  DWORD型,表示以ms為單位的計算機啟動后經歷的時間間隔。精度比WM_TIMER消息映射高,在較 短的定時中其計時誤差為15ms,在較長的定時中其計時誤差較低,如果定時時間太長,就好象死機一樣,CPU占用率非常高,只能用于要求不高的延時程序中.
            下列代碼可以實現50ms的精確定時:
                   DWORD dwStart = GetTickCount();
            DWORD dwEnd   = dwStart;
            do
            {
                          //為了在延遲時間不阻塞。可在此將消息傳出,但是會降低精度
            MSG   msg;
            GetMessage(&msg,NULL,0,0);
            TranslateMessage(&msg);
            DispatchMessage(&msg);
                          dwEnd = GetTickCount()-dwStart;
            }while(dwEnd <50);
            二,這就是我現在使用的方法,也決定以后都使用。。哈哈
             使用多媒體定時器timeSetEvent()函數,該函數定時精度為ms級(精度基本準確,由于掛接窗口一般是在工具中實現,內部人員使用,所以不需要控制機器配置)。
            MMRESULT timeSetEvent( UINT uDelay,
            UINT uResolution,
            LPTIMECALLBACK lpTimeProc,
            WORD dwUser,
            UINT fuEvent )
            該函數設置一個定時回調事件,此事件可以是一個一次性事件或周期性事件。事件一旦被激活,便調用指定的回調函數, 成功后返回事件的標識符代碼,否則返回NULL
            參數說明:
            uDelay:以毫秒指定事件的周期。
            Uresolution:以毫秒指定延時的精度,數值越小定時器事件分辨率越高。缺省值為1ms。
            LpTimeProc:指向一個回調函數。
            DwUser:存放用戶提供的回調數據。
            FuEvent:指定定時器事件類型:
            TIME_ONESHOT:uDelay毫秒后只產生一次事件
            TIME_PERIODIC :每隔uDelay毫秒周期性地產生事件。  
            需要注意的是,任務處理的時間不能大于周期間隔時間。另外,在定時器使用完畢后, 應及時調用timeKillEvent()將之釋放。 
            雖然還有更加精確的計時方法,不過對于我的需求這個以經夠用了
            我的實現代碼
            UINT   uTimerID;         //定義定時器句柄   
            void   CALLBACK   TimerCallProc(UINT   TimerID,   UINT   msg,DWORD   dwUser,   DWORD   dwa,DWORD   dwb)   
            {
             // TODO: 在此添加消息處理程序代碼和/或調用默認值

             Sleep(1);
            }
            //當前設置為1ms...
            uTimerID=timeSetEvent(1,1,&TimerCallProc,0,TIME_PERIODIC);
            //退出時
             timeKillEvent(uTimerID);                   //刪除定時器事件   
             timeEndPeriod(1);                          //清除定時器分辨率  



             

            posted on 2007-10-17 17:38 Randy 閱讀(5489) 評論(1)  編輯 收藏 引用

            評論

            # re: 毫秒級計時器 2012-12-03 11:53 外貿領航

            國外新聞http://www.ciqol.net/seenews  回復  更多評論   

            <2012年12月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統(tǒng)計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            人妻无码精品久久亚瑟影视| 久久99精品久久久久久hb无码| 久久香蕉一级毛片| 久久久久亚洲精品男人的天堂| 欧美日韩精品久久免费| 久久婷婷五月综合97色一本一本| 国产成人久久精品区一区二区| 久久综合狠狠综合久久97色| 伊人久久大香线蕉综合影院首页| 国产精品久久久亚洲| 一级女性全黄久久生活片免费 | 久久精品成人免费网站| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久久久久久97| 久久午夜无码鲁丝片午夜精品| 久久精品国产亚洲av日韩| 欧美激情精品久久久久久久九九九 | 精品久久久久久国产| www亚洲欲色成人久久精品| 精品伊人久久大线蕉色首页| 久久久久国产视频电影| 久久91精品国产91久久小草 | 亚洲AV无码1区2区久久 | 午夜精品久久久久久久| 免费一级欧美大片久久网| 国产精品成人99久久久久| 国内精品久久人妻互换| AV无码久久久久不卡蜜桃| 色99久久久久高潮综合影院| 91精品无码久久久久久五月天| 成人综合伊人五月婷久久| 亚洲中文字幕无码久久精品1 | 久久99热这里只频精品6| 青青青青久久精品国产h久久精品五福影院1421 | 久久毛片一区二区| 久久久久婷婷| 国产午夜久久影院| 精品国产福利久久久| 中文字幕亚洲综合久久| 亚洲国产精品久久66| 国产—久久香蕉国产线看观看|