• <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>

            毫秒級(jí)計(jì)時(shí)器

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

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

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

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



             

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

            評(píng)論

            # re: 毫秒級(jí)計(jì)時(shí)器 2012-12-03 11:53 外貿(mào)領(lǐng)航

            國(guó)外新聞http://www.ciqol.net/seenews  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久久久女教师免费一区| 久久精品成人免费网站| 色综合久久天天综线观看| 亚洲国产成人久久笫一页| 无码伊人66久久大杳蕉网站谷歌 | 97久久精品午夜一区二区| MM131亚洲国产美女久久| 久久AAAA片一区二区| 亚洲AV乱码久久精品蜜桃| 99久久精品国产一区二区三区| 久久久久久国产a免费观看黄色大片 | 久久综合狠狠综合久久激情 | 欧美久久一级内射wwwwww.| 久久一日本道色综合久久| 久久亚洲高清综合| 国产一级持黄大片99久久| 亚洲国产一成久久精品国产成人综合 | 久久91这里精品国产2020| 午夜精品久久久久久毛片| 久久亚洲av无码精品浪潮| 国产精品女同一区二区久久| 亚洲中文字幕无码久久2020| 亚洲精品国产综合久久一线| 伊人久久综合热线大杳蕉下载| 久久精品国产久精国产思思| 久久精品亚洲AV久久久无码 | 亚洲国产一成人久久精品| 日日狠狠久久偷偷色综合免费 | 久久久久久精品免费看SSS | 久久天天躁狠狠躁夜夜avapp| 久久电影网| 久久精品无码免费不卡| 久久WWW免费人成—看片| 97久久精品人人澡人人爽| 国产精品免费久久久久久久久| 久久亚洲综合色一区二区三区| 大伊人青草狠狠久久| 51久久夜色精品国产| 亚洲一本综合久久| 久久精品亚洲乱码伦伦中文| 日韩va亚洲va欧美va久久|