小弟现在要做一个数据库连接池,设置一个连接对象类,该类用一个handle类型成员来存放一个event对象,来实现对该连接对象的互斥访问。用vector容器实现一个连接池,池内存放连接类对象。容器初始化后有50个元素。初始化的时候创建event对象,并设置一个数组hEvent来存放event对象句柄,每次请求连接数据库时,调用waitformultipleobjects来获取一个对象。
现在的问题是如果当前使用的连接超过50个,就添加一个连接到连接池中,但是这个添加的连接对象的event对象句柄没有办法动态添加到句柄数组中,也就不能使用waitformultipleobjects了。该怎样做呢?
想过用map容器,但是好象也会遇到这个问题。该怎么设计呢?

解决方案 »

  1.   

    你可以换换思路,不一定非要事件处理。可以考虑其它的方法。一般连接池和线程池在一起使用。整个程序创建一个线程池,在每个线程上创建一个数据库连接(一个线程一个数据库连接)。这样就没有任何问题了。
    怎样保证在一个线程上创建一个数据库连接呢?你把数据库处理封装成一个类,在这个线程上new一个类对象,并把他以线程本地存储的方式存储起来,当每次使用数据库时,从线程本地存储中取出来。
      

  2.   

    一个线程一个数据库连接,只要线程还存在连接就不断,当线程结束时最好释放数据库连接类对象(当然如果是在退出程序才结束线程就可以不用释放)。当每次使用时先从线程本地存储中取出数据库连接类对象,在做数据库操作是先ping数据库,如果成功则调用操作,如果失败,才释放此对象(Delete)并重新new一个,再存储到本地存储中去。
      

  3.   

    当每次使用时先从线程本地存储中取出数据库连接类对象,在调用数据库操作时先ping数据库(MYSQL有API提供),如果成功则调用数据库操作;如果失败,则释放此对象(Delete)并重新new一个再存储到本地存储中去。