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

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            我記得有個Omni的類庫中有對線程的封裝,看了看,不爽
            ACE也有線程類,不過要用必須連接其龐大的ace.so 不爽
            ICE也有,不過太簡單
            還是自己寫:
            哈哈,支持win32和posix接口
            這個咚咚已經在好多地方用過,希望提點

             1 
             2 #ifndef _THREAD_H
             3 #define _THREAD_H
             4 
             5 #include "nv_vartype.h"
             6 #include "nvplat.h"
             7 
             8 #ifdef WIN32
             9 #include <windows.h>
            10 typedef HANDLE NVHANDLE;
            11 
            12 #define NVCreateThead(handle,proc,param,bret) {\
            13                                                 DWORD thrid;\
            14                                                 handle = CreateThread(0,0,(LPTHREAD_START_ROUTINE)proc,(void*)param,0,&thrid);\
            15                                                 bret  = true;\
            16                                               }
            17 #define THREAD_DETACH
            18 
            19 #endif
            20 
            21 #ifdef _UNIX
            22 typedef pthread_t NVHANDLE;
            23 
            24 #define NVCreateThead(handle,proc,param,bret)    {\
            25                                                  int ret;\
            26                                                  ret= pthread_create(&handle,0,proc,param);\
            27                                                  bret= (ret!=0)?false:true;\
            28                                                 }
            29 #define THREAD_DETACH            pthread_detach(pthread_self());
            30 #endif
            31 
            32 
            33 typedef void *(*THREAD_PROC)(void *param);
            34 
            35 
            36 class NVThread{
            37 public:
            38     enum STATUS{
            39         RUNNING,
            40         STOP
            41     };
            42     enum WHERE{
            43         HEAD,
            44         TAIL
            45     };
            46     NVThread();
            47     ~NVThread();    
            48     bool        Create(void *param=0);
            49     void        Terminate();
            50     void        Wait();
            51     STATUS         GetStatus();
            52     void         SetStatus(STATUS status);
            53     WHERE         GetWhere();
            54     void         SetWhere(WHERE where);
            55     static void *     NewThread(void *);
            56     virtual void     Run(void *param);
            57 protected:    
            58     NVHANDLE    _thrhand;
            59     STATUS        _status;
            60     WHERE        _where;
            61     void *        _param;
            62     void *        _void;
            63 };
            64 
            65 #define  THREAD_START(t)    (t).SetStatus(RUNNING); (t).SetWhere(HEAD);
            66 #define  THREAD_END(t)    (t).SetStatus(STOP); (t).SetWhere(TAIL);THREAD_DETACH;
            67 #define  THREAD_CONTINUE(t) ((t).GetStatus()== NVThread::RUNNING)?true:false
            68 
            69 #define THREAD_START_T    THREAD_START(*this)
            70 #define THREAD_END_T    THREAD_END(*this)
            71 #define THREAD_CONTINUE_T THREAD_CONTINUE(*this)
            72 
            73 
            74 
            75 #include "nvthread.i"
            76 
            77 #endif
            78 //--
            79 
             1 
             2 
             3 #include "nvthread.h"
             4 
             5 inline  
             6 NVThread::NVThread(){
             7     _where = TAIL;
             8     _status = STOP;
             9     
            10 }
            11 inline  
            12 NVThread::~NVThread(){
            13 }
            14 
            15 inline  
            16 bool NVThread::Create(void *param){
            17     bool ret;
            18     NVCreateThead(_thrhand,NVThread::NewThread,this,ret);
            19     if( ret){ //--線程創建成功,等待線程運行狀態改變
            20         while( GetStatus()!=NVThread::RUNNING){
            21             SLEEP_MSEC(100);
            22         }
            23     }
            24     return ret;
            25 }
            26 
            27 inline 
            28 void NVThread::Terminate(){
            29     _status = STOP;
            30 }
            31 
            32 inline 
            33 void * NVThread::NewThread(void *param){
            34     NVThread *thread = (NVThread *)param;
            35     THREAD_START(*thread);
            36     thread->Run(thread->_param);
            37     THREAD_END(*thread);
            38     return 0;
            39 }
            40 
            41 inline 
            42 void NVThread::Run(void *param){
            43 /*    while(THREAD_CONTINUE(*this)){
            44         Sleep(100);
            45     }    */
            46 }
            47 
            48 inline 
            49 void NVThread::Wait(){
            50     while(GetWhere()!=TAIL){
            51         SLEEP_MSEC(100);
            52     }
            53 }
            54 
            55 inline 
            56 NVThread::STATUS NVThread::GetStatus(){
            57     return _status;
            58 }
            59 
            60 inline 
            61 void NVThread::SetStatus(STATUS status){
            62     _status = status;
            63 }
            64 
            65 inline 
            66 NVThread::WHERE NVThread::GetWhere(){
            67     return _where;
            68 }
            69 
            70 inline 
            71 void NVThread::SetWhere(WHERE where){
            72     _where = where;
            73 }
            74 
            75 
            76 
            77 

            派生線程類實現分派外部全局函數
             1
             2#ifndef _THREADOBJECT_H
             3#define _THREADOBJECT_H
             4
             5/*
             6    file:    nvthreadobj.h
             7    class:     NVThreadObject
             8    desc:    控制外部線程行為
             9*/

            10
            11
            12#include "nvthread.h"
            13
            14class NVThreadObject:public NVThread{
            15public:
            16    void     Run(void *param){
            17        _threadproc(param);    
            18    }

            19    bool    Create(THREAD_PROC proc,void *param=0){
            20        _threadproc = proc;
            21        _param = param;
            22        return NVThread::Create();
            23    }

            24protected:    
            25    THREAD_PROC    _threadproc;
            26}
            ;
            27#endif
            posted on 2006-03-11 00:24 放屁阿狗 閱讀(527) 評論(0)  編輯 收藏 引用
            亚洲国产一成久久精品国产成人综合 | 狠狠色丁香久久综合五月| 久久人人爽人人精品视频| 久久精品国产亚洲欧美| 国产精品久久久久久吹潮| 亚洲∧v久久久无码精品| 久久精品国产日本波多野结衣| 色欲综合久久躁天天躁| 精品久久久久久国产牛牛app| 亚洲狠狠综合久久| 超级碰久久免费公开视频| 香蕉久久一区二区不卡无毒影院| 国产精品一区二区久久精品| 亚洲国产精品久久66| 99久久99久久精品国产片果冻| 嫩草影院久久国产精品| 久久精品不卡| 久久无码专区国产精品发布| 狠狠色噜噜色狠狠狠综合久久| 久久久久亚洲av无码专区导航| 国产精品一久久香蕉产线看| 99热成人精品免费久久| 久久精品中文字幕有码| 一级a性色生活片久久无| 综合网日日天干夜夜久久| 国产成人久久AV免费| 久久国产成人午夜aⅴ影院| 色婷婷狠狠久久综合五月| 亚洲精品无码久久久影院相关影片 | 思思久久好好热精品国产| 日本强好片久久久久久AAA| 99国产精品久久| 久久天天婷婷五月俺也去| 久久久亚洲欧洲日产国码aⅴ| 国产真实乱对白精彩久久| 中文字幕无码久久精品青草 | 久久综合伊人77777麻豆| 久久丫精品国产亚洲av| 欧美久久久久久午夜精品| 亚洲精品白浆高清久久久久久| 岛国搬运www久久|