日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网狐棋牌(四) TimerEngine

發(fā)布時(shí)間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网狐棋牌(四) TimerEngine 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
相關(guān)UML:


CTimerEngine成員變量:
? ??//狀態(tài)變量
? ? DWORD? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???m_dwTimerSpace;? ?? ?? ?? ?? ?? ???//時(shí)間間隔,這個(gè)值后來(lái)應(yīng)該是給了定時(shí)器線程
protected:
? ??
bool? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???m_bService;? ?? ?? ?? ?? ?? ?? ?? ?//運(yùn)行標(biāo)志
? ? DWORD? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???m_dwTimePass;? ?? ?? ?? ?? ?? ???//經(jīng)過(guò)時(shí)間
? ? DWORD? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???m_dwTimeLeave;? ?? ?? ?? ?? ?? ???//倒計(jì)時(shí)間
? ? CTimerItemPtr? ?? ?? ?? ?? ?? ?? ?? ?m_TimerItemFree;? ?? ?? ?? ?? ??//空閑數(shù)組
? ? CTimerItemPtr? ?? ?? ?? ?? ?? ?? ?? ?m_TimerItemActive;? ?? ?? ?? ?? ??//活動(dòng)數(shù)組

這些是分析定時(shí)器線程函數(shù)需要了解的成員變量,其次是線程同步:
從代碼中可以看出所有對(duì):m_TimerItemActive;??m_TimerItemFree;的操作都是在一個(gè)線程鎖的保護(hù)之下的。


定時(shí)器線程:
通過(guò)CTimerThread繞一圈以后最終被循環(huán)執(zhí)行的實(shí)際上是這個(gè)函數(shù)(m_dwTimerSpace控制最小時(shí)間):
[cpp]?view plaincopy
  • //定時(shí)器通知??
  • void?CTimerEngine::OnTimerThreadSink()??
  • {??
  • ????//鎖定資源??
  • ????CThreadLockHandle?LockHandle(&m_ThreadLock);??
  • ??
  • ????//倒計(jì)時(shí)間??
  • ????if?(m_dwTimeLeave==NO_TIME_LEFT)???
  • ????{??
  • ????????ASSERT(m_TimerItemActive.GetCount()==0);??
  • ????????return;??
  • ????}??
  • ??
  • ????//減少時(shí)間??
  • ????ASSERT(m_dwTimeLeave>=m_dwTimerSpace);??
  • ????m_dwTimeLeave-=m_dwTimerSpace;??
  • ????m_dwTimePass+=m_dwTimerSpace;??
  • ??
  • ????//查詢定時(shí)器??
  • ????if?(m_dwTimeLeave==0)??
  • ????{??
  • ????????bool?bKillTimer=false;??
  • ????????tagTimerItem?*?pTimerItem=NULL;??
  • ????????DWORD?dwTimeLeave=NO_TIME_LEFT;??
  • ????????for?(INT_PTR?i=0;i<m_TimerItemActive.GetCount();)??
  • ????????{??
  • ????????????//效驗(yàn)參數(shù)??
  • ????????????pTimerItem=m_TimerItemActive;??
  • ????????????ASSERT(pTimerItem!=NULL);??
  • ????????????ASSERT(pTimerItem->dwTimeLeave>=m_dwTimePass);??
  • ??
  • ????????????//定時(shí)器處理??
  • ????????????bKillTimer=false;??
  • ????????????//?這一行做了--操作??
  • ????????????pTimerItem->dwTimeLeave?-=?m_dwTimePass;??
  • ????????????if?(pTimerItem->dwTimeLeave==0L)??
  • ????????????{??
  • ????????????????//發(fā)送通知??
  • ????????????????m_AttemperEvent.PostTimerEvent(pTimerItem->wTimerID,pTimerItem->wBindParam);??
  • ??
  • ????????????????//設(shè)置次數(shù)??
  • ????????????????if?(pTimerItem->dwRepeatTimes!=TIMER_REPEAT_TIMER)??
  • ????????????????{??
  • ????????????????????ASSERT(pTimerItem->dwRepeatTimes>0);??
  • ????????????????????if?(pTimerItem->dwRepeatTimes==1L)??
  • ????????????????????{??
  • ????????????????????????bKillTimer=true;??
  • ????????????????????????m_TimerItemActive.RemoveAt(i);??
  • ????????????????????????m_TimerItemFree.Add(pTimerItem);??
  • ????????????????????}??
  • ????????????????????else?pTimerItem->dwRepeatTimes--;??
  • ????????????????}??
  • ??
  • ????????????????//設(shè)置時(shí)間,從新開(kāi)始倒計(jì)時(shí)??
  • ????????????????if?(bKillTimer==false)?pTimerItem->dwTimeLeave=pTimerItem->dwElapse;??
  • ????????????}??
  • ??
  • ????????????//增加索引??
  • ????????????if?(bKillTimer==false)???
  • ????????????{??
  • ????????????????i++;??
  • ????????????????dwTimeLeave=__min(dwTimeLeave,pTimerItem->dwTimeLeave);??
  • ????????????????ASSERT(dwTimeLeave%m_dwTimerSpace==0);??
  • ????????????}??
  • ????????}??
  • ??
  • ????????//設(shè)置響應(yīng)??
  • ????????m_dwTimePass=0L;??
  • ????????m_dwTimeLeave=dwTimeLeave;??
  • ????}??
  • ??
  • ????return;??
  • }??
  • CTimerEngine:
    啟動(dòng)一個(gè)定時(shí)器線程,循環(huán)遍歷定時(shí)器,如果發(fā)現(xiàn)滿足出發(fā)條件的定時(shí)器就投遞一個(gè)定時(shí)器消息到CQueueServiceEvent對(duì)象。

    總結(jié)

    以上是生活随笔為你收集整理的网狐棋牌(四) TimerEngine的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。