• <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 楊粼波 閱讀(1169) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程C++Windows

            四虎国产精品免费久久久| 狠狠色丁香久久婷婷综合_中| 久久久久女教师免费一区| 久久国产成人| 久久国产欧美日韩精品免费| 伊人久久精品影院| 久久婷婷激情综合色综合俺也去| 97久久精品无码一区二区天美| 国产精品青草久久久久福利99| 久久99热这里只有精品66| 久久久久久青草大香综合精品| 久久国产乱子伦精品免费午夜| 久久精品国产亚洲av瑜伽| 99久久精品费精品国产| 亚洲国产精品无码久久| 久久国产免费| 亚洲欧洲中文日韩久久AV乱码| 思思久久好好热精品国产| 亚洲欧美成人综合久久久| 久久精品无码专区免费东京热| 久久精品极品盛宴观看| 亚洲国产另类久久久精品黑人| 久久精品人人做人人爽97 | 久久av免费天堂小草播放| 久久精品成人免费观看97| 久久亚洲精品无码VA大香大香| 97r久久精品国产99国产精| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 综合人妻久久一区二区精品| 精品国产乱码久久久久久浪潮| 成人国内精品久久久久影院VR| 热久久视久久精品18| 狠狠色丁香久久婷婷综| 久久亚洲AV成人无码电影| 婷婷久久综合九色综合98| 天天做夜夜做久久做狠狠| 91精品婷婷国产综合久久| 久久久精品人妻一区二区三区蜜桃| 久久国产免费直播| 色婷婷综合久久久中文字幕| 久久无码精品一区二区三区|