天天看點

ACE_Module_Base類

  ACE_Module_Base子產品隻定義  

ACE_Module_Base類

  class ACE_Export ACE_Module_Base { public:  enum  { /// Indicates that <close> should not delete any Tasks. 訓示<close>不要删除任何隊列     M_DELETE_NONE = 0,   /// Indicates that <close> should delete the writer Task. 訓示<close>删除寫任務     M_DELETE_READER = 1,   /// Indicates that <close> should delete the reader Task. 訓示<close>删除讀任務     M_DELETE_WRITER = 2,   /// Indicates that <close> deletes the Tasks. 訓示<close>删除任務         M_DELETE = 3  }; };   ACE_Module

ACE_Module_Base類

  ACE_Module 是基于System V流的概念,它包括一對任務,一個是處理upstream,一個是處理downstream,一般而言你需要子類化該類,除非你子類化ACE_Task.簡單一點的說ACE_Module它提供了對一對任務(讀和寫)的管理進階封裝,友善流讀寫任務的指針出入和關閉處理,因為它代表在流的棧的某層的子產品,下面就會說道流ACE_Stream的這個對象。   template <ACE_SYNCH_DECL> class ACE_Module : public ACE_Module_Base { 以子產品名字<module_name>作為辨別讀<reader>寫<writer>任務建立和初始化。初始化預設讀寫任務為空。  ACE_Module (const ACE_TCHAR *module_name,               ACE_Task<ACE_SYNCH_USE> *writer = 0,               ACE_Task<ACE_SYNCH_USE> *reader = 0,               void *args = 0,               int flags = M_DELETE);   與構造函數類似,以子產品名字<module_name>作為辨別讀<reader>寫<writer>任務建立和初始化。初始化預設讀寫任務為空。根據辨別flags_參數注冊讀寫,關閉,删除,不能在<ACE_Task::module_closed>調用  int open (const ACE_TCHAR *module_name,             ACE_Task<ACE_SYNCH_USE> *writer = 0,             ACE_Task<ACE_SYNCH_USE> *reader = 0,             void *a = 0,             int flags = M_DELETE);   關閉子產品和任務,标記flags參數可以使用覆寫預設的行為,那取決以前面的<open>,<reader>,<writer>的<flag>的值。先前的M_DELETE[_XXX]不能被覆寫,不能在<ACE_Task::module_closed>調用  int close (int flags = M_DELETE_NONE);   ACE_Task處理例程,得到寫任務。  ACE_Task<ACE_SYNCH_USE> *writer (void);   設定寫任務。<flags>可以使用來指定子產品可以通過調用關閉或析構來删除的寫任務。先前的任務如果存在,它會關閉。寫任務是否可以删除取決參數flags。不能在<ACE_Task::module_closed>調用  void writer (ACE_Task<ACE_SYNCH_USE> *q, int flags = M_DELETE_WRITER);    得到讀任務  ACE_Task<ACE_SYNCH_USE> *reader (void);  void reader (ACE_Task<ACE_SYNCH_USE> *q, int flags = M_DELETE_READER);    在<ACE_Module>設定和擷取兄弟任務  /// Set and get pointer to sibling <ACE_Task> in an <ACE_Module>  ACE_Task<ACE_SYNCH_USE> *sibling (ACE_Task<ACE_SYNCH_USE> *orig);    得到子產品辨別名字  const ACE_TCHAR *name (void) const;    設定子產品辨別名稱  void name (const ACE_TCHAR *);    擷取傳入任務的參數  void *arg (void) const;    設定傳入任務的參數  void arg (void *);    連接配接其他上遊的棧的子產品  void link (ACE_Module<ACE_SYNCH_USE> *m);   擷取流中子產品指針  ACE_Module<ACE_SYNCH_USE> *next (void);    擷取流中子產品指針  void next (ACE_Module<ACE_SYNCH_USE> *m);    動态配置設定hooks  ACE_ALLOC_HOOK_DECLARE;   private:  讀寫任務關閉操作  int close_i (int which, int flags);    一對讀寫任務指針  ACE_Task<ACE_SYNCH_USE> *q_pair_[2];    ACE_Module.名字  ACE_TCHAR name_[MAXNAMLEN + 1];    棧中的下一個ACE_Module  ACE_Module<ACE_SYNCH_USE> *next_;    void *arg_;    任務如何删除關閉的标記  int flags_; }; }               ACE_Stream主要是ASX抽象類,模型來自System V流。它包含一個<ACE_Modules>棧,每個又包含一對讀寫任務對。該類主要是對流頭和尾ACE_Module子產品的連結清單棧的方式處理和維護。流在多協定棧的消息塊處理(put,get)提供很友善的管理。   ACE_Stream流棧   put/get(ACE_Message_Block)

ACE_Module_Base類

template <ACE_SYNCH_DECL> class ACE_Stream {  virtual int open (void *arg,                     ACE_Module<ACE_SYNCH_USE> *head = 0,                     ACE_Module<ACE_SYNCH_USE> *tail = 0);         virtual int close (int flags = M_DELETE); virtual ~ACE_Stream (void);         virtual int push (ACE_Module<ACE_SYNCH_USE> *mod); virtual int pop (int flags = M_DELETE); virtual int top (ACE_Module<ACE_SYNCH_USE> *&mod); virtual int insert (const ACE_TCHAR *prev_name,                       ACE_Module<ACE_SYNCH_USE> *mod);        virtual int replace (const ACE_TCHAR *replace_name,                        ACE_Module<ACE_SYNCH_USE> *mod,                        int flags = M_DELETE); virtual int remove (const ACE_TCHAR *mod, int flags = M_DELETE);        virtual ACE_Module<ACE_SYNCH_USE> *head (void);       virtual ACE_Module<ACE_SYNCH_USE> *tail (void);       virtual ACE_Module<ACE_SYNCH_USE> *find (const ACE_TCHAR *mod);       virtual int link (ACE_Stream<ACE_SYNCH_USE> &);       virtual int unlink (void);   virtual int put (ACE_Message_Block *mb,                    ACE_Time_Value *timeout = 0);      */       virtual int get (ACE_Message_Block *&mb,                    ACE_Time_Value *timeout = 0);   指向流的頭指針  ACE_Module<ACE_SYNCH_USE> * stream_head_;    指向流尾的指針  ACE_Module<ACE_SYNCH_USE> * stream_tail_;    /// Pointer to an adjoining linked stream.  ACE_Stream<ACE_SYNCH_USE> * linked_us_; }      

ACE_Module_Base類

      流子產品   ustream流頭 ACE_Stream_Head,ustream.流尾 ACE_Stream_Tail, ACE_Thru_Task提供流層任務處理基層類,在實際的運用中,繼承這些類并在svc()實作流資料的處理。   template <ACE_SYNCH_DECL> class ACE_Stream_Head : public ACE_Task<ACE_SYNCH_USE> { public:  virtual int open (void *a = 0);  virtual int close (u_long flags = 0);  virtual int put (ACE_Message_Block *msg, ACE_Time_Value * = 0);  virtual int svc (void);    virtual int init (int argc, ACE_TCHAR *argv[]);  virtual int info (ACE_TCHAR **info_string, size_t length) const;  virtual int fini (void); private:  /// Performs canonical flushing at the ACE_Stream Head.  int control (ACE_Message_Block *);  int canonical_flush (ACE_Message_Block *); };   ustream.流尾 template <ACE_SYNCH_DECL> class ACE_Stream_Tail : public ACE_Task<ACE_SYNCH_USE> {  virtual int open (void *a = 0);  virtual int close (u_long flags = 0);  virtual int put (ACE_Message_Block *msg, ACE_Time_Value * = 0);  virtual int svc (void);    virtual int init (int argc, ACE_TCHAR *argv[]);  virtual int info (ACE_TCHAR **info_string, size_t length) const;  virtual int fini (void); }   template <ACE_SYNCH_DECL> class ACE_Thru_Task : public ACE_Task<ACE_SYNCH_USE> {  virtual int open (void *a = 0);  virtual int close (u_long flags = 0);  virtual int put (ACE_Message_Block *msg, ACE_Time_Value * = 0);  virtual int svc (void);    virtual int init (int argc, ACE_TCHAR *argv[]);  virtual int info (ACE_TCHAR **info_string, size_t length) const;  virtual int fini (void); }   這裡可以看到svc函數是個空函數,運用的時候實作這個函數 template <ACE_SYNCH_DECL> int ACE_Thru_Task<ACE_SYNCH_USE>::svc (void) {  ACE_TRACE ("ACE_Thru_Task<ACE_SYNCH_USE>::svc");  return -1; }       結合ACE0015例子   首先看看對象   class Handler : public ACE_Svc_Handler  客戶對象 class Protocol_Stream                                協定流對象 class Recv : public Protocol_Task                接收任務 class Xmit : public Protocol_Task               發送任務 class Protocol_Task : public ACE_Task<ACE_MT_SYNCH>   他們的關系如下: Recv和Xmit都是繼承任務類ACE_Task,分别是ACE_SOCK_Stream上接收客戶請求和發送客戶資料的封裝線程類(ACE_Task又是任務也是線程類)。他們剛好是ACE_SOCK_Stream的一對讀寫任務類,構成一個ACE_Module執行個體,然後将ACE_Module執行個體push(ACE_Module*)壓入ACE_Stream中.這樣我們使用的協定流的對象變得非常簡潔,隻需要通ACE_Stream的put,get函數通路消息資料     ACE_Svc_Handler

ACE_Module_Base類

put /get(ACE_Message_Block *&message),