青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對(duì)現(xiàn)實(shí),超越自己
逆水行舟,不進(jìn)則退
posts - 269,comments - 32,trackbacks - 0

SetTimer函數(shù)用于創(chuàng)建一個(gè)計(jì)時(shí)器,KillTimer函數(shù)用于銷毀一個(gè)計(jì)時(shí)器。計(jì)時(shí)器屬于系統(tǒng)資源,使用完應(yīng)及時(shí)銷毀。

 

  SetTimer的函數(shù)原型如下:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ;
  其中
  hWnd是和timer關(guān)聯(lián)的窗口句柄,此窗口必須為調(diào)用SetTimer的線程所有;如果hWnd為NULL,沒有窗口和timer相關(guān)聯(lián)并且nIDEvent參數(shù)被忽略
  nIDEvent是timer的標(biāo)識(shí),為非零值;如果hWnd為NULL則被忽略;如果hWnd非NULL而且與timer相關(guān)聯(lián)的窗口已經(jīng)存在一個(gè)為此標(biāo)識(shí)的timer,則此次SetTimer調(diào)用將用新的timer代替原來(lái)的timer。timer標(biāo)識(shí)和窗口相關(guān),兩個(gè)不同的窗口可以擁有nIDEvent相同的tiemr
  uElapse是以毫秒指定的計(jì)時(shí)間隔值,范圍為1毫秒到4,294,967,295毫秒(將近50天),這個(gè)值指示W(wǎng)indows每隔多久時(shí)間給程序發(fā)送WM_TIMER消息。
  lpTimerFunc是一個(gè)回調(diào)函數(shù)的指針,俗稱TimerFunc;如果lpTimerFunc為NULL,系統(tǒng)將向應(yīng)用程序隊(duì)列發(fā)送WM_TIMER消息;如果lpTimerFunc指定了一個(gè)值,DefWindowProc將在處理WM_TIMER消息時(shí)調(diào)用這個(gè)lpTimerFunc所指向的回調(diào)函數(shù),因此即使使用TimerProc代替處理WM_TIMER也需要向窗口分發(fā)消息。

  關(guān)于SetTimer的返回值:如果hWnd為NULL,返回值為新建立的timer的ID,如果hWnd非NULL,返回一個(gè)非0整數(shù),如果SetTimer調(diào)用失敗則返回0

  KillTimer的函數(shù)原型為:BOOL KillTimer( HWND hWnd, UINT_PTR uIDEvent ) ; 參數(shù)意義同SetTimer。
  關(guān)于KillTimer對(duì)消息隊(duì)列中剩余未處理的WM_TIMER消息的影響,MSDN和Programming Windows上的說(shuō)法完全相反。MSDN的說(shuō)法很干脆:The KillTimer function does not remove WM_TIMER messages already posted to the message queue. 而petzold則說(shuō) The KillTimer call purges the message queue of any pending WM_TIMER messages. Your program will never receive a stray WM_TIMER message following a KillTimer call.(KillTimer消除消息隊(duì)列中任何未處理的WM_TIMER消息,調(diào)用KillTimer后你的程序永遠(yuǎn)不會(huì)收到一條“漂泊游蕩”的WM_TIMER消息)

 

關(guān)于WM_TIMER消息

  wParam為計(jì)時(shí)器的ID;如果需要設(shè)定多個(gè)計(jì)時(shí)器,那么對(duì)每個(gè)計(jì)時(shí)器都使用不同的計(jì)時(shí)器ID。wParam的值將隨傳遞到窗口過(guò)程中的WM_TIMER消息的不同而不同。
  lParam為指向TimerProc的指針,如果調(diào)用SetTimer時(shí)沒有指定TimerProc(參數(shù)值為NULL),則lParam為0(即NULL)。
  可以通過(guò)在窗口過(guò)程中提供一個(gè)WM_TIMER case處理這個(gè)消息,或者,默認(rèn)窗口過(guò)程會(huì)調(diào)用SetTimer中指定的TimerProc來(lái)處理WM_TIMER消息

 

使用計(jì)時(shí)器的三種方法

  如果在程序的整個(gè)執(zhí)行過(guò)程中使用計(jì)時(shí)器,一般在處理WM_CREATE消息時(shí)或WinMain中消息循環(huán)前調(diào)用SetTimer,在處理WM_DESTROY消息時(shí)或在WinMain中消息循環(huán)后return前調(diào)用KillTimer。根據(jù)SetTimer中的參數(shù)不同,有三種方法使用計(jì)時(shí)器。

  方法一:調(diào)用SetTimer時(shí)指定窗口句柄hWnd,nIDEvent中指定計(jì)時(shí)器ID,將lpTimerFunc置NULL從而不使用TimerProc;在窗口過(guò)程中處理WM_TIMER消息調(diào)用KillTimer時(shí),使用SetTimer中指定的hWnd和id。最好使用#define定義timer的id,例如:

 

#define ID_TIMER 1
SetTimer(hWnd,ID_TIMER,1000,NULL) ;
KillTimer(hWnd,ID_TIMER) ;

  方法二:調(diào)用SetTimer時(shí)指定窗口句柄hWnd,nIDEvent中指定計(jì)時(shí)器IDlpTimerFunc參數(shù)不為NULL而指定為TimerProc函數(shù)的指針。這種方法使用TimerProc函數(shù)(名字可自定)處理WM_TIMER消息

 

VOID CALLBACK TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
 //處理WM_TIMER訊息
}

   TimerProc的參數(shù)hwnd是在調(diào)用SetTimer時(shí)指定的窗口句柄。Windows只把WM_TIMER消息送給TimerProc,因此消息參數(shù)總是等于WM_TIMER。iTimerID值是計(jì)時(shí)器ID,dwTimer值是與從GetTickCount函數(shù)的返回值相容的值。這是自Windows啟動(dòng)后所經(jīng)過(guò)的毫秒數(shù)。 使用這種方法時(shí),相關(guān)函數(shù)調(diào)用的形式為:

 

SetTimer(hWnd,ID_TIMER,1000,TimerProc) ;
KillTimer(hWnd,ID_TIMER) ;

  方法三:調(diào)用SetTimer時(shí)不指定窗口句柄(為NULL)iTimerID參數(shù)自然被忽略lpTimerFunc不為NULL而指定為TimerProc的指針。正如上面SetTimer的討論中所說(shuō)的,此時(shí)SetTimer的返回值正是新建立的計(jì)時(shí)器的ID,需將這個(gè)ID保存以供KillTimer銷毀計(jì)時(shí)器時(shí)所用。當(dāng)然,KillTimer的hWnd參數(shù)也置為NULL。這種方法同樣用TimerProc處理WM_TIMER消息

 

UINT_PTR iTimerID ;
iTimerID = SetTimer(NULL,0,1000,TimerProc) ;
KillTimer(NULL,iTimerID) ;

  使用這種方法的好處是不必自己指定計(jì)時(shí)器ID,這樣就不必?fù)?dān)心用錯(cuò)ID。

 

使用多個(gè)計(jì)時(shí)器

  使用多個(gè)計(jì)時(shí)器只要在建立計(jì)時(shí)器時(shí)指定不同的ID。比如用上面所述方法一時(shí)的情況:

 

#define TIMER_SEC 1
#define TIMER_MIN 2

然后使用兩個(gè)SetTimer來(lái)設(shè)定兩個(gè)計(jì)時(shí)器:
SetTimer (hwnd, TIMER_SEC, 1000, NULL) ;
SetTimer (hwnd, TIMER_MIN, 60000, NULL) ;

WM_TIMER的處理如下所示:
case WM_TIMER:
 switch (wParam)
 {
  case TIMER_SEC:
   //每秒一次的處理
   break ;
  case TIMER_MIN:
   //每分鐘一次的處理
   break ;
 }
 return 0 ;

 

 

改變計(jì)時(shí)器的時(shí)間間隔

  如果想將一個(gè)已經(jīng)存在的計(jì)時(shí)器設(shè)定為不同的時(shí)間間隔,可以簡(jiǎn)單地用不同的時(shí)間值再次調(diào)用SetTimer。

 

計(jì)時(shí)器精確嗎?

  計(jì)時(shí)器并不精確。有兩個(gè)原因:

  原因一:Windows計(jì)時(shí)器是硬件和ROM BIOS架構(gòu)下之計(jì)時(shí)器一種相對(duì)簡(jiǎn)單的擴(kuò)充。回到Windows以前的MS-DOS程序?qū)懽鳝h(huán)境下,應(yīng)用程式能夠通過(guò)攔截者稱為timer tick的BIOS中斷來(lái)實(shí)現(xiàn)時(shí)鐘或計(jì)時(shí)器。一些為MS-DOS編寫的程序自己攔截這個(gè)硬件中斷以實(shí)現(xiàn)時(shí)鐘和計(jì)時(shí)器。這些中斷每54.915毫秒產(chǎn)生一次,或者大約每秒18.2次。這是原始的IBM PC的微處理器頻率值4.772720 MHz被218所除而得出的結(jié)果。在Windows 98中,計(jì)時(shí)器與其下的PC計(jì)時(shí)器一樣具有55毫秒的解析度。在Microsoft Windows NT中,計(jì)時(shí)器的解析度為10毫秒。Windows應(yīng)用程式不能以高于這些解析度的頻率(在Windows 98下,每秒18.2次,在Windows NT下,每秒大約100次)接收WM_TIMER消息。在SetTimer中指定的時(shí)間間隔總是截尾后tick數(shù)的整數(shù)倍。例如,1000毫秒的間隔除以54.925毫秒,得到18.207個(gè)tick,截尾后是18個(gè)tick,它實(shí)際上是989毫秒。對(duì)每個(gè)小于55毫秒的間隔,每個(gè)tick都會(huì)產(chǎn)生一個(gè)WM_TIMER消息。
  可見,計(jì)時(shí)器并不能嚴(yán)格按照指定的時(shí)間間隔發(fā)送WM_TIMER消息,它總要相差那么幾毫秒。

  即使忽略這幾個(gè)毫秒的差別,計(jì)時(shí)器仍然不精確。請(qǐng)看原因二:
  WM_TIMER消息放在正常的消息隊(duì)列之中,和其他消息排列在一起,因此,如果在SetTimer中指定間隔為1000毫秒,那么不能保證程序每1000毫秒或者989毫秒就會(huì)收到一個(gè)WM_TIMER消息。如果其他程序的執(zhí)行事件超過(guò)一秒,在此期間內(nèi),您的程式將收不到任何WM_TIMER訊息。事實(shí)上, Windows對(duì)WM_TIMER消息的處理非常類似于對(duì)WM_PAINT消息的處理,這兩個(gè)消息都是低優(yōu)先級(jí)的,程序只有在消息隊(duì)列中沒有其他消息時(shí)才接收它們。
  WM_TIMER還在另一方面和WM_PAINT相似:Windows不能持續(xù)向消息隊(duì)列中放入多個(gè)WM_TIMER訊息,而是將多余的WM_TIMER消息組合成一個(gè)消息。因此,應(yīng)用程序不會(huì)一次收到多個(gè)這樣的消息,盡管可能在短時(shí)間內(nèi)得到兩個(gè)WM_TIMER消息。應(yīng)用程序不能確定這種處理方式所導(dǎo)致的WM_TIMER消息「遺漏」的數(shù)目。
  可見,WM_TIMER消息并不能及時(shí)被應(yīng)用程序所處理,WM_TIMER在消息隊(duì)列中的延誤可能就不能用毫秒來(lái)計(jì)算了。

  由以上兩點(diǎn),你不能通過(guò)在處理WM_TIMER時(shí)一秒一秒計(jì)數(shù)的方法來(lái)計(jì)時(shí)。如果要實(shí)現(xiàn)一個(gè)時(shí)鐘程序,可以使用系統(tǒng)的時(shí)間函數(shù)如GetLocalTime ,而在時(shí)鐘程序中,計(jì)時(shí)器的作用是定時(shí)調(diào)用GetLocalTime獲得新的時(shí)間并刷新時(shí)鐘畫面,當(dāng)然這個(gè)刷新的間隔要等于或小于1秒。

本文轉(zhuǎn)自:http://m.shnenglu.com/ivenher/articles/19969.html

posted on 2012-09-10 17:16 王海光 閱讀(608) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲先锋成人| 欧美在线网站| 国产日本欧美一区二区三区在线| 蜜月aⅴ免费一区二区三区| 国产精品久久久久久久久婷婷| 欧美韩国一区| 亚洲国产精品嫩草影院| 久久激情久久| 久久九九99视频| 国产老女人精品毛片久久| 正在播放亚洲一区| 亚洲免费在线视频| 国产精品免费观看视频| 亚洲欧美影院| 久久精品国产亚洲5555| 国产麻豆综合| 久久精品国产久精国产思思| 久热精品视频在线观看一区| 狠狠入ady亚洲精品| 久久婷婷成人综合色| 欧美国产日韩一区二区| 亚洲日本激情| 欧美人与禽性xxxxx杂性| 亚洲美女色禁图| 亚洲女女女同性video| 国产伦精品一区二区三区视频孕妇 | 99在线精品视频| 亚洲一区二区三区777| 国产精品一区久久久久| 久久精品中文字幕一区| 欧美激情一区二区三区高清视频| 亚洲精品久久久久久久久| 欧美日韩视频一区二区| 亚洲新中文字幕| 久久这里有精品视频| 亚洲精品亚洲人成人网| 国产精品美女午夜av| 久久精品理论片| 亚洲三级免费| 一区二区三区国产精品| 国产欧美日本在线| 美国十次成人| 国产精品99久久99久久久二8| 久久国产一区二区三区| 亚洲精品乱码久久久久| 国产精品一区二区久久精品 | 一区二区三区四区蜜桃| 久久se精品一区二区| 亚洲激情综合| 国产精品免费观看视频| 久久综合狠狠综合久久综合88 | 中日韩在线视频| 久久夜色精品国产| 亚洲美女免费精品视频在线观看| 国产精品高潮呻吟久久av黑人| 久久精品国产99精品国产亚洲性色 | 亚洲欧美国产毛片在线| 伊人婷婷欧美激情| 欧美视频一区二区| 久久久久久久久综合| 日韩亚洲视频| 噜噜噜91成人网| 亚洲欧美精品一区| 亚洲精品视频中文字幕| 国产综合视频在线观看| 欧美日韩一二区| 久久久久久久综合狠狠综合| 亚洲手机成人高清视频| 欧美黄色成人网| 久久久久久亚洲综合影院红桃| 亚洲视频你懂的| 亚洲国产小视频| 国产一区二区久久| 国产精品乱码一区二区三区| 欧美激情精品久久久久久蜜臀 | 亚洲尤物在线视频观看| 亚洲欧洲一区二区三区在线观看 | 亚洲国产精品久久久久婷婷老年| 久久国产免费看| 亚洲综合国产激情另类一区| 亚洲精品日韩一| 亚洲国产欧美一区| 激情小说另类小说亚洲欧美 | 国产精品久久久久久久app| 欧美精品一区二| 蜜桃av噜噜一区| 久久精品在线观看| 欧美制服第一页| 性欧美大战久久久久久久久| 亚洲一区二区少妇| 亚洲视频香蕉人妖| 一区二区三区欧美在线| 99www免费人成精品| 亚洲精品乱码久久久久久蜜桃91| 欧美大胆成人| 欧美激情视频一区二区三区免费| 欧美va天堂在线| 欧美成年网站| 亚洲第一精品久久忘忧草社区| 欧美va天堂在线| 亚洲国产成人av| 亚洲国产精品va在线看黑人动漫 | 亚洲一区二区三区中文字幕| 日韩一级大片在线| 99re热这里只有精品视频| 99成人在线| 亚洲天堂激情| 午夜一级在线看亚洲| 欧美制服第一页| 久久亚洲国产精品一区二区| 麻豆精品一区二区综合av| 欧美1区3d| 亚洲国产综合在线看不卡| 亚洲精品乱码久久久久久黑人 | 麻豆成人精品| 欧美激情久久久久久| 亚洲激情网站免费观看| 亚洲人成人一区二区三区| 99re热这里只有精品免费视频| 一本久久综合亚洲鲁鲁五月天| 中国成人在线视频| 欧美一区二区大片| 久久久.com| 欧美伊人久久| 亚洲片在线观看| 亚洲激情第一页| 99综合在线| 午夜亚洲性色福利视频| 久久不射中文字幕| 免费观看久久久4p| 欧美日韩国产综合视频在线| 国产精品手机视频| 在线视频国产日韩| 中国女人久久久| 久久精品最新地址| 亚洲国产一区二区三区a毛片| 中文欧美在线视频| 久久精品99久久香蕉国产色戒| 欧美国产极速在线| 国产精品国产a| 亚洲成人资源| 亚洲免费视频网站| 麻豆成人av| 亚洲天堂av电影| 老司机一区二区三区| 国产精品国产a级| 亚洲电影在线看| 亚洲女与黑人做爰| 欧美成人精品在线播放| 一区二区电影免费观看| 久久久精品日韩| 欧美偷拍一区二区| 亚洲成人在线视频网站| 亚洲一区美女视频在线观看免费| 久久婷婷激情| 中国成人黄色视屏| 欧美高清视频在线| 很黄很黄激情成人| 亚洲男人的天堂在线aⅴ视频| 免费看av成人| 亚洲欧美在线看| 欧美日精品一区视频| 亚洲国产一区视频| 久久精品亚洲一区二区| 日韩网站在线看片你懂的| 久久亚洲精品欧美| 国产欧美一区二区三区另类精品| 9i看片成人免费高清| 欧美 日韩 国产一区二区在线视频| 亚洲伊人一本大道中文字幕| 欧美精品免费观看二区| 在线欧美日韩精品| 久久久久久亚洲精品中文字幕| 亚洲午夜久久久久久尤物| 欧美精品午夜| 亚洲精品一二三区| 亚洲第一区在线观看| 久久午夜激情| 一区在线视频| 久久精品最新地址| 欧美一区1区三区3区公司| 国产精品中文字幕在线观看| 亚洲视频精品在线| 日韩午夜av在线| 欧美日韩国产色站一区二区三区| 亚洲激情一区二区三区| 蜜桃伊人久久| 久久久久久久尹人综合网亚洲| 国产亚洲一级| 久久精品五月婷婷| 欧美一区二区三区免费看| 国产精品一页| 久久成人精品视频| 欧美一区二区高清| 国产在线精品成人一区二区三区 | 久久欧美中文字幕| 午夜精品久久一牛影视| 国产欧美精品日韩| 久久久久亚洲综合| 欧美一区二区网站|