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

            久久精品a亚洲国产v高清不卡| 久久午夜福利无码1000合集| 久久99九九国产免费看小说| 国产午夜福利精品久久| 区久久AAA片69亚洲| 性做久久久久久久久老女人| 久久青青草视频| 国产成人精品综合久久久久| 伊人久久大香线蕉无码麻豆| 亚洲AV日韩精品久久久久| 国产综合久久久久久鬼色| 国产精品午夜久久| 久久精品这里只有精99品| 国产A级毛片久久久精品毛片| yy6080久久| 少妇高潮惨叫久久久久久 | 麻豆精品久久精品色综合| 精品久久久无码中文字幕天天| 久久99精品久久久久久秒播| 久久亚洲国产最新网站| 99久久精品免费看国产一区二区三区| 亚洲va久久久噜噜噜久久天堂| 精品久久久久久国产| 久久久久久久精品妇女99 | 天天爽天天爽天天片a久久网| 久久综合给合综合久久| 国产精品一久久香蕉国产线看观看 | 美女写真久久影院| 国产精品亚洲综合久久| 99久久成人国产精品免费 | 久久无码一区二区三区少妇| 久久精品人人做人人爽电影| 国产精品久久波多野结衣| 亚洲精品午夜国产va久久| 国产V综合V亚洲欧美久久| 日韩欧美亚洲综合久久影院Ds | 久久婷婷五月综合97色一本一本| 国产一区二区三精品久久久无广告| 亚洲精品综合久久| 国产成人精品久久| 久久久久久国产精品无码超碰|