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

            久久精品国产色蜜蜜麻豆| 久久国产色AV免费观看| 国产亚洲欧美精品久久久| 九九精品久久久久久噜噜| 国内精品久久久久久久久| 青青国产成人久久91网| 精品久久综合1区2区3区激情| 国产综合成人久久大片91| 亚洲国产成人久久笫一页| 一本色道久久88—综合亚洲精品| 亚洲中文字幕无码一久久区| 国产精品久久影院| 日韩久久久久中文字幕人妻| 伊人久久大香线蕉亚洲| 亚洲天堂久久精品| 精品熟女少妇AV免费久久| 久久99精品国产麻豆宅宅| 欧美粉嫩小泬久久久久久久| 精品久久久久久无码中文字幕一区| 久久最新精品国产| 亚洲va久久久久| 免费观看成人久久网免费观看| 日本五月天婷久久网站| 国产成人久久精品区一区二区| 久久精品视频一| 精品国产婷婷久久久| 久久久久亚洲av无码专区喷水 | 99国内精品久久久久久久| 亚洲欧美国产日韩综合久久| 精品国产一区二区三区久久久狼 | 天天久久狠狠色综合| 中文字幕久久久久人妻| 伊人久久五月天| 色妞色综合久久夜夜| 久久综合久久综合亚洲| 亚洲欧美日韩精品久久亚洲区 | 亚洲欧美成人综合久久久| 久久综合亚洲色一区二区三区| 久久久久综合国产欧美一区二区| 精品久久久久久无码国产| 国产精品欧美亚洲韩国日本久久|