• <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>
            隨筆-3  評論-5  文章-13  trackbacks-0

            --------------------------------------------------------------------------------
            標題: 隊列和事件的配合使用示例
            作者: 葉飛虎
            日期: 2009.09.09
            --------------------------------------------------------------------------------

               一個線程收到事件或消息后直接加入到隊列,而處理線程讀取隊列中的事件或消息,并
            加以處理。在這個模式中,有一個線程負責寫,多個處理線程讀自己的隊列并處理。雖然看
            起來象是一寫多讀,其實不然,針對某一事件隊列而言,只有一個線程是寫一個線程是讀。

            隊列和事件的配合使用示例如下:

             

              1 /* 方法一: 獨立線程處理隊列 */
              2 
              3 // 線程執(zhí)行體
              4 void TDealThread::Execute()
              5 {
              6    // 初始化
              7    Longword dwNo;
              8    Longword dwCount;
              9    TItem*   pItem;
             10 
             11    // 線程循環(huán)體
             12    while (!Terminated())
             13    {
             14       // 等待事件
             15       FEvent->Wait(INFINITE);
             16 
             17       // 循環(huán)處理事件項
             18       dwCount = FQueue->Count();
             19       for (dwNo = 0!Terminated() && (dwNo < dwCount); dwNo++)
             20       {
             21          pItem = (TItem*)FQueue->Pop();
             22          if (pItem != NULL)
             23          {
             24             // 處理事件項
             25             // ???  
             26 
             27             // 釋放項
             28             delete pItem;
             29          }
             30       }
             31    }
             32 }
             33 
             34 // 添加事件
             35 bool TDealThread::AddEvent(const TItem& AItem)
             36 {
             37    // 初始化
             38    bool result = false;
             39 
             40    // 判斷線程是否未終止
             41    if (!Terminated())
             42    {
             43       // 初始化
             44       TItem* pItem;
             45 
             46       // 新建項
             47       pItem  = new TItem;
             48       *pItem = AItem;
             49 
             50       // 加入隊列
             51       if (FQueue->Push(pItem))
             52       {
             53          // 事件置位
             54          FEvent->Set();
             55          result = true;
             56       }
             57       else
             58          delete pItem;
             59    }
             60 
             61    // 返回結(jié)果
             62    return result;
             63 }
             64 
             65 // 關(guān)閉線程
             66 void TDealThread::Close()
             67 {
             68    // 置終止標志
             69    Terminate();
             70    FEvent->Set();
             71 
             72    // 喚醒休眠線程
             73    if (!Finished() && Suspended())
             74       Resume();
             75 }
             76 
             77 /* 方法二: 外部線程處理 */
             78 
             79 // 外部線程取事件
             80 bool TOwnerObj::GetEvent(TItem& AItem, Longword ATimeout)
             81 {
             82    // 先取隊列項
             83    bool result = GetItem(AItem);
             84 
             85    // 判斷是否需要等待
             86    if (!result && (ATimeout != 0))
             87    {
             88       // 初始化
             89       Longword dwBegin = GetTickCount();
             90 
             91       // 循環(huán)等待事件
             92       while (GetTickCount() - dwBegin < ATimeout)
             93       {
             94          // 防止其它多線程讀取時信號取不到, 50 毫秒等待
             95          FEvent->Wait(50);
             96 
             97          // 取隊列項
             98          if (GetItem(AItem))
             99          {
            100             result = true;
            101             break;
            102          }
            103       }
            104    }
            105 
            106    // 返回結(jié)果
            107    return result;
            108 }
            109 
            110 // 添加事件
            111 bool TOwnerObj::AddEvent(const TItem& AItem)
            112 {
            113    // 初始化
            114    bool   result = false;
            115    TItem* pItem;
            116 
            117    // 新建項
            118    pItem  = new TItem;
            119    *pItem = AItem;
            120 
            121    // 加入隊列
            122    if (FQueue->Push(pItem))
            123    {
            124       // 事件置位
            125       FEvent->Set();
            126       result = true;
            127    }
            128    else
            129       delete pItem;
            130 
            131    // 返回結(jié)果
            132    return result;
            133 }
            134 
            135 // 取隊列項
            136 bool TOwnerObj::GetItem(TItem& AItem)
            137 {
            138    // 初始化
            139    TItem* pItem;
            140    bool   result = false;
            141 
            142    // 判斷隊列是否非空
            143    while (FQueue->Count() != 0)
            144    {
            145       pItem = (TItem*)FQueue->Pop();
            146       if (pItem != NULL)
            147       {
            148          AItem  = *pItem;
            149          result = true;
            150 
            151          // 釋放項
            152          delete pItem;
            153          break;
            154       }
            155    }
            156 
            157    // 返回結(jié)果
            158    return result;
            159 }
            160 

             

            posted on 2011-05-22 11:08 Kyee Ye 閱讀(251) 評論(0)  編輯 收藏 引用 所屬分類: 技巧雜集
            久久精品毛片免费观看| 99久久精品国产高清一区二区 | 狠狠人妻久久久久久综合蜜桃| 99久久人妻无码精品系列蜜桃| 一本伊大人香蕉久久网手机| 久久久99精品成人片中文字幕| 一本色综合网久久| 少妇人妻88久久中文字幕| 天天久久狠狠色综合| 9久久9久久精品| 久久综合九色欧美综合狠狠| 亚洲愉拍99热成人精品热久久 | 国产婷婷成人久久Av免费高清| 久久毛片免费看一区二区三区| 亚洲午夜久久久久久久久电影网| 久久91亚洲人成电影网站| 香蕉久久夜色精品国产2020| 成人免费网站久久久| 久久精品aⅴ无码中文字字幕不卡| 好属妞这里只有精品久久| 狠狠色噜噜色狠狠狠综合久久| 国产亚洲精午夜久久久久久 | 久久久久99精品成人片直播| 伊人久久大香线蕉综合网站| 亚洲国产精久久久久久久| 亚洲国产精品无码久久久秋霞2| 欧美久久一级内射wwwwww.| 成人综合伊人五月婷久久| 亚洲va中文字幕无码久久不卡| 亚洲精品乱码久久久久久不卡| 久久久精品一区二区三区| 久久精品水蜜桃av综合天堂| 亚洲午夜久久久久久久久久| 欧美伊人久久大香线蕉综合| 深夜久久AAAAA级毛片免费看| 久久久久久久国产免费看| 亚洲乱亚洲乱淫久久| 国产99久久久久久免费看| 国产成人香蕉久久久久| 久久99热这里只有精品国产| 国产精品内射久久久久欢欢|