1. 程式人生 > >網狐定時器引擎分析

網狐定時器引擎分析

先貼出來網狐原始碼:

  1. #ifndef WH_THREAD_HEAD_FILE
  2. #define WH_THREAD_HEAD_FILE
  3. #pragma once
  4. #include "ServiceCoreHead.h"
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //執行緒物件
  7. class SERVICE_CORE_CLASS CWHThread  
  8. {  
  9.     //狀態變數
  10. private:  
  11.     volatilebool                   m_bRun;                             //執行標誌
  12.     //執行緒變數
  13. private:  
  14.     UINT
                                m_uThreadID;                        //執行緒標識
  15.     HANDLE                          m_hThreadHandle;                    //執行緒控制代碼
  16.     //函式定義
  17. protected:  
  18.     //建構函式
  19.     CWHThread();  
  20.     //解構函式
  21.     virtual ~CWHThread();  
  22.     //介面函式
  23. public:  
  24.     //獲取狀態
  25.     virtualbool IsRuning();  
  26.     //啟動執行緒
  27.     virtualbool StartThread();  
  28.     //終止執行緒
  29.     virtualbool ConcludeThread(DWORD dwMillSeconds);  
  30.     //功能函式
  31. public:  
  32.     //執行緒標識
  33.     UINT GetThreadID() { return m_uThreadID; }  
  34.     //執行緒控制代碼
  35.     HANDLE GetThreadHandle() { return m_hThreadHandle; }  
  36.     //投遞訊息
  37.     LRESULT PostThreadMessage(
    UINT uMessage, WPARAM wParam, LPARAM lParam);  
  38.     //事件函式
  39. protected:  
  40.     //執行事件
  41.     virtualbool OnEventThreadRun() { returntrue; }  
  42.     //開始事件
  43.     virtualbool OnEventThreadStrat() { returntrue; }  
  44.     //終止事件
  45.     virtualbool OnEventThreadConclude() { returntrue; }  
  46.     //內部函式
  47. private:  
  48.     //執行緒函式
  49.     static unsigned __stdcall ThreadFunction(LPVOID pThreadData);  
  50. };  
  51. //////////////////////////////////////////////////////////////////////////////////
  52. #endif
  1. #include "StdAfx.h"
  2. #include "WHThread.h"
  3. //////////////////////////////////////////////////////////////////////////////////
  4. //結構定義
  5. //啟動引數
  6. struct tagThreadParameter  
  7. {  
  8.     bool                            bSuccess;                           //是否錯誤
  9.     HANDLE                          hEventFinish;                       //事件控制代碼
  10.     CWHThread   *               pServiceThread;                     //執行緒指標
  11. };  
  12. //////////////////////////////////////////////////////////////////////////////////
  13. //建構函式
  14. CWHThread::CWHThread()  
  15. {  
  16.     //設定變數
  17.     m_bRun=false;  
  18.     m_uThreadID=0;  
  19.     m_hThreadHandle=NULL;  
  20.     return;  
  21. }  
  22. //解構函式
  23. CWHThread::~CWHThread()  
  24. {  
  25.     //停止執行緒
  26.     ConcludeThread(INFINITE);  
  27.     return;  
  28. }  
  29. //狀態判斷
  30. bool CWHThread::IsRuning()  
  31. {  
  32.     //執行檢測
  33.     if (m_hThreadHandle==NULL) returnfalse;  
  34.     if (WaitForSingleObject(m_hThreadHandle,0)!=WAIT_TIMEOUT) returnfalse;  
  35.     returntrue;  
  36. }  
  37. //啟動執行緒
  38. bool CWHThread::StartThread()  
  39. {  
  40.     //效驗狀態
  41.     ASSERT(IsRuning()==false);  
  42.     if (IsRuning()==truereturnfalse;  
  43.     //清理變數
  44.     if (m_hThreadHandle!=NULL)   
  45.     {  
  46.         //關閉控制代碼
  47.         CloseHandle(m_hThreadHandle);  
  48.         //設定變數
  49.         m_uThreadID=0;  
  50.         m_hThreadHandle=NULL;  
  51.     }  
  52.     //變數定義
  53.     tagThreadParameter ThreadParameter;  
  54.     ZeroMemory(&ThreadParameter,sizeof(ThreadParameter));  
  55.     //設定變數
  56.     ThreadParameter.bSuccess=false;  
  57.     ThreadParameter.pServiceThread=this;  
  58.     ThreadParameter.hEventFinish=CreateEvent(NULL,FALSE,FALSE,NULL);  
  59.     //效驗狀態
  60.     ASSERT(ThreadParameter.hEventFinish!=NULL);  
  61. 相關推薦

    定時引擎分析

    先貼出來網狐原始碼: #ifndef WH_THREAD_HEAD_FILE #define WH_THREAD_HEAD_FILE #pragma once #include "ServiceCoreHead.h" //////////

    SylixOS普通定時精度分析

    min per 隊列 node 系統 ice 普通 問題 全局 1. 適用範圍 SylixOS下實現高精度定時器和普通定時器功能,本文檔介紹普通定時器的精度問題,適用於SylixOS開發工程師,使用者應具備SylixOS基礎知識以及基本編程能力。2. 實現原理

    pring Scheduler定時原理分析

    首先我們看看簡單定時器實現方法:用ScheduledExecutorService介面    Java程式碼   public interface ScheduledExecutorService extend

    FreeRTOS timer定時原始碼分析

    ===============================   部落格點滴積累,部分話語和知識點來源於網路,感謝網路資源的提供者====== freertos的定時器實現比較簡單,建立一個守護程序

    Windows系統三種定時分析

    3)TimerQueueTimer定時器,應該算迄今為止Windows系統最強大的定時器了。他可以支援多種工作模式,而且定時精度也是最高的。 使用時,首先要呼叫CreateTimerQueue建立一個定時器佇列,然後用CreateTimerQueueTimer來建立一個TimerQueueTimer定時器,

    棋牌(三) 排程引擎初步分析

    {46            //效驗大小47            NTY_SocketReadEvent * pSocketReadEvent=(NTY_SocketReadEvent *)pBuffer;48            ASSERT(wDataSize>=sizeof(NTY_Sock

    絡協議棧(13)syn flood攻擊防範及部分重傳定時參數分析

    到來 rto 大於 ive 初始化 sk_buff signed ren ont 一、syn cookie攻擊防禦方法在前一篇文章中說明了syn flood的原理,可以看到,該機制會造成服務器的DOS癱瘓而無法提供正常服務,所以在當前的Linux中提供了一種相對比較智能的方

    Linux時間子系統之四:定時引擎:clock_event_device

    到來 開始 register 工作模式 統一 10個 net 說過 序列 早期的內核版本中,進程的調度基於一個稱之為tick的時鐘滴答,通常使用時鐘中斷來定時地產生tick信號,每次tick定時中斷都會進行進程的統計和調度,並對tick進行計數,記錄在一個jiffies變量

    Cocos2d-x 源代碼分析 : Scheduler(定時) 源代碼分析

    tel 技術分享 name list sch lam 源碼 hat array 源代碼版本號 3.1r,轉載請註明 我也最終不out了,開始看3.x的源代碼了。此時此刻的心情僅僅能是wtf!!!!!!!!!。只是也最終告別CC時代了。

    榮耀前臺網站編譯出現找不到服務‘RYAccountsDBLink’錯誤解決

    ima clas nts es2017 count div 9.png .com img 網狐榮耀前臺網站編譯出現找不到服務器‘RYAccountsDBLink’錯誤解決

    SylixOS定時測試誤差分析

    接收 下場 分享 小時 add 場景 情況 images 定時器 測試模型1.1 測試流程圖 1.1 運行流程如圖 1.1所示為測試代碼運行流程,通過GPIO拉高到拉低的時間來判斷定時器的精準度。1.2 測試方法1.2.1 測試模型利用ZYNQ內部私有定時器,設置定時

    Lua客戶端登陸界面源碼分析

    info alt src 登陸 客戶 技術分享 mage inf 9.png 網狐Lua客戶端登陸界面源碼分析

    muduo絡庫學習筆記(三)TimerQueue定時隊列

    tex || 麻煩 這也 原因 否則 errno.h 受限 bind 目錄 muduo網絡庫學習筆記(三)TimerQueue定時器隊列 Linux中的時間函數 timerfd簡單使用介紹 timerfd示例 muduo中對timerfd的封裝 TimerQueue的結

    白鷺引擎定時程式碼例項

    白鷺引擎 版本:5.2.8 描述:實現定時器操作程式碼例項 全域性宣告 private timer:egret.Timer; private num; 函式中使用的程式碼片段 ptivate fun_num(){ this.ti

    java定時之Timer使用與原理分析

    Timer和TimerTask Timer是jdk中提供的一個定時器工具,使用的時候會在主執行緒之外起一個單獨的執行緒執行指定的計劃任務,可以指定執行一次或者反覆執行多次。 TimerTask是一個實現了Runnable介面的抽象類,代表一個可以被Timer執行的任務。 【使用舉例】

    定時分析

    定時器分析 文章目錄 定時器分析 @[toc] 時鐘分類 jiffies變數 xtime變數 時鐘初始化 時間更新 動態定時器 nan

    node.js中的定時nextTick()和setImmediate()區別分析

    nextTick()和setImmediate()都是延遲載入。但是nextTick()是放在當前佇列的最後一個,setImmediate()是下一個佇列的對首 console.log(1); //下一個佇列的對首 setImmediate(()=>{ console.log('set

    Xen 程式碼分析分析(2.軟中斷-定時)

    1.  硬/軟中斷觸發與執行 本質上,Xen的軟硬中斷觸發執行過程為:硬體中斷觸發軟體中斷TIMER_SOFTIRQ,TIMER_SOFTIRQ負責處理所有的軟定時器,軟定時器們有的負責觸發排程軟中斷、有的作為vcpu的虛擬定時器源。 a)  系統啟動時執行init_

    co_routine.cpp/.h/inner.h(第四部分:定時和事件迴圈)—— libco原始碼分析、學習筆記

    由於本原始碼蠻長的,所以按照功能劃分模組來分析,分為若干部分,詳見二級目錄↑ 定時器和事件迴圈 libco管理定時事件便是使用時間輪這種資料結構 定時器前驅知識本篇只稍微提一下,具體知識請參考《Linux高效能伺服器程式設計 遊雙 著》第11章,或其他方式學

    Muduo網路庫原始碼分析(二) 定時TimeQueue,Timer,TimerId

    首先,我們先要明白為什麼需要設計這樣一個定時器類? 在開發Linux網路程式時,通常需要維護多個定時器,如維護客戶端心跳時間、檢查多個數據包的超時重傳等。如果採用linux的SIGALARM訊號實現,則會帶來較大的系統開銷,且不便於管理。 Muduo 的 Timer