| 
 
 对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。  连接池的实现  
 2、连接池实现 class CManageConnection { private: float m_CreateTime; ConnectionPtr m_conn; Bool m_IsConnection; public: CManageConnection(float intime,Cstring strConn); ~ CManageConnection(); Bool IsConnection(); //是否空闲 Bool IsFreeConnection();//是否还是可用连接 ConnectionPtr GetConnection(); Private: RealseConn(); } class CmanagePoolConn { private: int minConn;//连接池里连接的最小数量 int maxConn;//连接池里允许存在的最大连接数 int checkedOut;//已被分配出去的连接数 Cstring m_strConn;//连接字符串 Timer timer;//定时器 CArray< CManageConnection *, CManageConnection *> m_A ManageConn; Public : CmanagePoolConn(); ~ CmanagePoolConn(); public: void CreateManagePool(int innum1,int innum2,Cstring instr); void FreeManagePool(); _ConntionPtr * GetConnection (); private : void TimerEvent() //定时器事件处理函数 CManageConnection *NewManageConnection();//新建一个连接 Void DelectOldConnection(int index);//删除无用连接 } 
  | 
                
            
        
                    
                
浙公网安备 33010602011771号