• <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>

            kenlistian

            厚積薄發. 勤為槳,思為帆

               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
              73 隨筆 :: 4 文章 :: 22 評論 :: 0 Trackbacks
              1 #include <list>
              2 
              3 using namespace std;
              4 
              5 class CYException
              6 {
              7 public:
              8     CString sMsg;
              9     int nError;
             10     CYException(int nErr,char* sErrMsg){
             11         nError = nErr;
             12         sMsg  = sErrMsg;
             13     }
             14     virtual ~CYException(){}
             15 
             16 };
             17 
             18 template   <class  T> 
             19 class   CYQueueSyn 
             20 
             21   public
             22       std::list<T>   queue; 
             23       int   m_outtime; 
             24       HANDLE   m_readSem; 
             25       HANDLE   m_writeSem; 
             26       HANDLE   m_synObject; 
             27   public
             28       CYQueueSyn(int length,int  outtime = INFINITE); 
             29       virtual   ~CYQueueSyn(void); 
             30   public
             31       void   inq(T type); 
             32       T   outq(); 
             33 
             34       void   free();       
             35 }; 
             36 ////////////////////////////////////////////////////////
             37 template<class   T> 
             38 void   CYQueueSyn<T>::free() 
             39 
             40     int   size = (int)queue.size(); 
             41     for(int i = 0; i<size; i++
             42         delete queue.back(); 
             43     queue.clear(); 
             44 
             45 template<class T> 
             46 CYQueueSyn<T>::CYQueueSyn(int   length,int   outtime) 
             47 
             48     m_readSem = CreateSemaphore(NULL,0,length,NULL); 
             49     m_writeSem = CreateSemaphore(NULL,length,length,NULL); 
             50     m_synObject = ::CreateMutex(NULL,false,NULL); 
             51 
             52     m_outtime = outtime;
             53 
             54 template<class T> 
             55 CYQueueSyn<T>::~CYQueueSyn() 
             56 
             57     CloseHandle(m_readSem); 
             58     CloseHandle(m_writeSem); 
             59     CloseHandle(m_synObject); 
             60 
             61 
             62 template<class T> 
             63 void   CYQueueSyn<T>::inq(T type)   throw(CYException) 
             64 
             65     int  rVal = WaitForSingleObject(m_writeSem,m_outtime); 
             66     if(rVal == WAIT_OBJECT_0) 
             67     { 
             68         if(WaitForSingleObject(m_synObject,INFINITE) == WAIT_OBJECT_0) 
             69         { 
             70             queue.push_back(type); 
             71             ReleaseMutex(m_synObject); 
             72         } 
             73     } 
             74     else if(rVal == WAIT_TIMEOUT) 
             75     { 
             76         throw CYException(1,"TIMEOUT"); 
             77     } 
             78     else if(rVal == WAIT_ABANDONED) 
             79     { 
             80         throw CYException(-1"ERROR"); 
             81     } 
             82     ReleaseSemaphore(m_readSem,1,NULL); 
             83 
             84 template<class T> 
             85 T  CYQueueSyn<T>::outq()   throw(CYException) 
             86 
             87     T  value; 
             88     int rVal = WaitForSingleObject(m_readSem,m_outtime); 
             89     if(rVal == WAIT_OBJECT_0) 
             90     { 
             91         if(WaitForSingleObject(m_synObject,INFINITE) == WAIT_OBJECT_0) 
             92         { 
             93             value = queue.front(); 
             94             queue.pop_front(); 
             95             ReleaseMutex(m_synObject); 
             96         } 
             97     } 
             98     else if(rVal == WAIT_TIMEOUT) 
             99     { 
            100         throw CYException(1,"TIMEOUT"); 
            101     } 
            102     else if(rVal == WAIT_ABANDONED) 
            103     { 
            104         throw CYException(-1,"ERROR"); 
            105     } 
            106 
            107     ReleaseSemaphore(m_writeSem,1,NULL); 
            108     return   value; 
            109 
            110 
            111 #endif 

            如上,測試代碼下載:http://www.pudn.com/downloads97/sourcecode/windows/other/109201257cqueue.rar
            posted on 2008-01-15 15:13 kenlistian 閱讀(319) 評論(0)  編輯 收藏 引用 所屬分類: cpp
            亚洲精品无码久久久影院相关影片 | 久久久久久久亚洲精品| 久久久久亚洲精品天堂久久久久久 | 久久se精品一区精品二区| 国产精品久久自在自线观看| 精品久久久久久无码中文野结衣| 久久受www免费人成_看片中文| 久久国产乱子伦免费精品| 久久99精品久久久久久9蜜桃| 伊人色综合久久天天人手人婷| 久久久久一区二区三区| 亚洲精品乱码久久久久久蜜桃图片 | 热综合一本伊人久久精品| 国产99久久精品一区二区| 久久精品国产亚洲AV久| 久久狠狠一本精品综合网| 精品久久久久久成人AV| 久久久精品久久久久影院| 国产成人精品久久亚洲高清不卡 | 亚洲日韩中文无码久久| 国产香蕉久久精品综合网| 99久久亚洲综合精品网站| 久久永久免费人妻精品下载| 日韩欧美亚洲综合久久| 四虎影视久久久免费| 久久久久久亚洲精品无码| 99久久人人爽亚洲精品美女| 久久精品国产亚洲AV麻豆网站| 狠狠色丁香久久婷婷综合_中 | 亚洲AV无码久久精品蜜桃| 亚洲中文字幕无码久久2020 | 久久精品二区| 色婷婷噜噜久久国产精品12p| 久久国产三级无码一区二区| 亚洲国产精品久久久久婷婷软件 | 久久99精品九九九久久婷婷| 91精品观看91久久久久久| 国产高清美女一级a毛片久久w | 欧美色综合久久久久久| 午夜精品久久久久成人| 久久久无码精品亚洲日韩京东传媒|