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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            IOCP包裹類

            頭文件:
            /**********************************************************************
            * Copyright (C) 2008 -  - All Rights Reserved
            *
            * 文件名稱:        IOCP.h
            * 摘    要:        IOCP包裹類
            *     
            * 作    者:        yanglinbo, 
            * 修    改:        查看文件最下方.

            **********************************************************************
            */

            #ifndef __IOCP_H__
            #define __IOCP_H__


            #include <assert.h>
            #include <WinSock2.h>


            //////////////////////////////////////////////////////////////////////////
            /// IOCP包裝類,完成IOCP創建,關聯等動作
            //////////////////////////////////////////////////////////////////////////
            class CIOCP
            {
            public:
                CIOCP(int nMaxConcurrency = -1);
                virtual ~CIOCP(void);

                CIOCP& operator = (const CIOCP& rht);
                CIOCP& operator = (const HANDLE& rht);

                operator HANDLE() const;

                /// 創建IOCP
                
            /// @param [in] nMaxConcurrency 最大線程數
                BOOL Create(int nMaxConcurrency);

                /// 銷毀IOCP
                BOOL Destroy();

                /// 完全端口是否有效
                BOOL IsValid() const;

                /// 關聯指定SOCKET及參數到IOCP
                
            /// @param [in] socket
                
            /// @param [in] CompKey
                BOOL AssociateSocket(SOCKET socket, ULONG_PTR CompKey);

                /// 發送通知到IOCP
                
            /// @param [in] CompKey
                
            /// @param [in] dwNumBytes
                
            /// @param [in] po
                BOOL PostStatus(ULONG_PTR CompKey, DWORD dwNumBytes = 0, OVERLAPPED* po = NULL);

                /// 取得IOCP狀態
                
            /// @param [in] pCompKey
                
            /// @param [in] pdwNumBytes
                
            /// @param [in] ppo
                
            /// @param [in] dwMilliseconds
                BOOL GetStatus(ULONG_PTR* pCompKey, PDWORD pdwNumBytes, OVERLAPPED** ppo, DWORD dwMilliseconds = INFINITE);

            private:
                HANDLE        m_hIOCP;    ///< IOCP句柄
            };


            #endif


            cpp文件:
            /**********************************************************************
            * Copyright (C) 2008 -  - All Rights Reserved
            *
            * 文件名稱:        IOCP.cpp
            * 摘    要:        IOCP包裹類
            *     
            * 作    者:        yanglinbo, 
            * 修    改:        查看文件最下方.

            **********************************************************************
            */


            #include 
            "StdAfx.h" 
            #include 
            "IOCP.h"


            CIOCP::CIOCP( 
            int nMaxConcurrency /*= -1*/ )
            : m_hIOCP(INVALID_HANDLE_VALUE)
            {
                
            if (nMaxConcurrency != -1)
                
            {
                    Create(nMaxConcurrency);
                }

            }


            CIOCP::
            ~CIOCP( void )
            {
                Destroy();
            }


            CIOCP
            & CIOCP::operator=const CIOCP& rht )
            {
                m_hIOCP 
            = rht.m_hIOCP;
                
            return *this;
            }


            CIOCP
            & CIOCP::operator=const HANDLE& rht )
            {
                m_hIOCP 
            = rht;
                
            return *this;
            }


            CIOCP::
            operator HANDLE() const
            {
                
            return (HANDLE)(this == NULL ? NULL : m_hIOCP);
            }


            BOOL CIOCP::Create( 
            int nMaxConcurrency )
            {
                m_hIOCP 
            = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, nMaxConcurrency);
                ASSERT(IsValid());
                
            return IsValid();
            }


            BOOL CIOCP::Destroy()
            {
                
            if (IsValid() == FALSE) return TRUE;

                BOOL bClosed 
            = ::CloseHandle(m_hIOCP);
                m_hIOCP 
            = INVALID_HANDLE_VALUE;

                
            return bClosed;
            }


            BOOL CIOCP::AssociateSocket( SOCKET socket, ULONG_PTR CompKey )
            {
                ASSERT(IsValid());
                
            if ( IsValid() == FALSE ) return FALSE;
                
            return (::CreateIoCompletionPort((HANDLE)socket, m_hIOCP, CompKey, 0== m_hIOCP);
            }


            BOOL CIOCP::PostStatus( ULONG_PTR CompKey, DWORD dwNumBytes 
            /*= 0*/, OVERLAPPED* po /*= NULL*/ )
            {
                ASSERT(IsValid());
                
            if ( IsValid() == FALSE ) return FALSE;
                
            return ::PostQueuedCompletionStatus(m_hIOCP, dwNumBytes, CompKey, po);
            }


            BOOL CIOCP::GetStatus( ULONG_PTR
            * pCompKey, PDWORD pdwNumBytes, OVERLAPPED** ppo, DWORD dwMilliseconds /*= INFINITE*/ )
            {
                ASSERT(IsValid());
                
            if ( IsValid() == FALSE ) return FALSE;
                
            return ::GetQueuedCompletionStatus(m_hIOCP, pdwNumBytes, pCompKey, ppo, dwMilliseconds);
            }


            BOOL CIOCP::IsValid() 
            const
            {
                
            return (m_hIOCP != NULL) && (m_hIOCP != INVALID_HANDLE_VALUE);
            }

            posted on 2012-07-16 18:38 楊粼波 閱讀(1173) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程 、C++ 、Windows

            亚洲国产精品久久久久| 久久久久久久久久久| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 青草久久久国产线免观| 国产午夜福利精品久久2021| 久久久亚洲AV波多野结衣 | 一本色道久久综合亚洲精品| 一本一道久久a久久精品综合 | 久久青青草原国产精品免费 | 女同久久| 亚洲?V乱码久久精品蜜桃| 亚洲午夜精品久久久久久app| 日本精品久久久久影院日本| 日韩十八禁一区二区久久| 欧美日韩成人精品久久久免费看| 欧美日韩精品久久久免费观看| 一级做a爰片久久毛片免费陪| 香蕉久久夜色精品升级完成| 99久久99这里只有免费费精品| 国产成人久久激情91| 久久免费视频6| 中文字幕无码免费久久| 久久美女网站免费| 久久久精品久久久久影院| 久久亚洲春色中文字幕久久久 | 国产精品久久久久影院色| 国产A级毛片久久久精品毛片| 久久久久亚洲av毛片大| 精品国产乱码久久久久久呢 | 久久久久一本毛久久久| 一本一本久久A久久综合精品| 亚洲国产精品久久66| 亚洲精品无码久久千人斩| 91麻精品国产91久久久久| 日本五月天婷久久网站| 亚洲一本综合久久| 99久久精品免费看国产一区二区三区| 秋霞久久国产精品电影院| 亚洲AV无一区二区三区久久| 国产精品99久久久久久猫咪| 一本色道久久88—综合亚洲精品|