WINCE無視窗程序使用定時器

來源:互聯網
上載者:User

      對於WINCE下有視窗的程式,可以通過簡單的使用API SetTimer來建立一個定時器。當定時器逾時時視窗會收到一個WM_TIMER訊息,我們在WM_TIMER訊息中去做定時器逾時處理即可。而對於無視窗的程式,因為本身沒有訊息迴圈,所以無法收到WM_TIMER訊息,定時器也就無法正常工作了。

     那麼無視窗程序如何通過SetTimer來定時呢?其實我們只需在無視窗程序裡的主線程中加一個訊息迴圈,來處理WM_TIMER即可,參考代碼如下:

UINT uTimerID = ::SetTimer(NULL,NULL,1000,NULL);<br />MSG msg;<br />//訊息迴圈<br />while (GetMessage(&msg, NULL, 0, 0))<br />{<br />switch(msg.message)<br />{<br />case WM_QUIT:<br /> :KillTimer(NULL,uTimerID);<br />break;<br />case WM_TIMER:<br />//TODO:Treat WM_TIMER message<br />break<br />default:<br />break;<br />}<br />}<br />}

 

但對於無視窗的程式這樣還是比較麻煩的,使用定時器的時候還得添加訊息迴圈的代碼,其實微軟還提供了一個API timeSetEvent來建立定時器,已實現更精確的定時,參考代碼如下:

// 需要引入的標頭檔和庫<br />#include <mmsytem.h><br />#pragma comment(lib,"mmtimer.lib")<br />// 定時器回呼函數<br />void CALLBACK TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2);<br />// 建立定時器<br />MMRESULT uTimerID = timeSetEvent(1000,1,TimerProc,(DWORD)this,TIME_PERIODIC | TIME_CALLBACK_FUNCTION);</p><p>// 定時器逾時處理<br />void CALLBACK TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2)<br />{<br /> // TODO:Place Code here<br />}

最後別忘了調用timeKillEvent關閉定時器。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.