240717班级,工业化控制系统,煤矿相关行业,昆仑系统
congmu
2024-10-31 ad2a36a8425406799db94a2e26d1fba82db6aa60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma once
#include "MysqlConn.h"
#include "./tinyxml/tinyxml.h"
#include <queue>
#include <mutex>
#include <thread>
#include <atomic>
#include <condition_variable>
 
 
#pragma comment(lib, "./tinyxml/x64/Debug/tinyxml.lib")
 
// Ó¦ÓÃ-µ¥Àýģʽ£ºÀÁººÄ£Ê½[ÐèÒª¿¼ÂǶàḬ̈߳²È«ÎÊÌâ]
class ConnectionPool
{
private:
    ConnectionPool();
    // Òƶ¯¿½±´×îÖÕ»¹ÊÇÓÐÇÒ½öÓÐÒ»¸ö¶ÔÏó£¬ËùÒÔÒÀ¾ÉÊÇÊôÓÚµ¥Àýģʽ¡£
    // delete ×èÖ¹¿½±´¹¹ÔìºÍ¿½±´¸³ÖµµÄÀà¶ÔÏóÉú³É
    ConnectionPool(ConnectionPool&) = delete;
    ConnectionPool& operator=(ConnectionPool&) = delete;
    ~ConnectionPool();
    // ½âÎöxmlÅäÖÃÎļþ ¶ÁÈ¡Êý¾Ý¿â¼°Á¬½Ó³ØµÄÏà¹ØÐÅÏ¢
    bool parseXmlFile();
    // Ìí¼ÓÁ¬½Ó
    bool addConnection();
    // Ï̺߳¯Êý
    void productConnection();
    void recycleConnection();
 
    // ´æ·ÅÊý¾Ý¿âÁ¬½Ó³Ø½¨Á¢µÄÁ¬½Ó
    queue<MysqlConn*>    m_connections;
    // Ò»Ð©»ù±¾ÐÅÏ¢
    string                m_ip;            // IP
    unsigned short        m_port;            // ¶Ë¿Ú
    string                m_user;            // Óû§Ãû
    string                m_passwd;        // ÃÜÂë
    string                m_dbName;        // Êý¾Ý¿âÃû³Æ
    int                    m_minSize;        // ³õʼÁ¬½ÓÁ¿(×îСÁ¬½ÓÁ¿)
    int                    m_maxSize;        // ×î´óÁ¬½ÓÁ¿
    int                    m_timeout;        // ³¬Ê±Ê±³¤
    int                    m_maxIdleTime;    // ×î´ó¿ÕÏÐʱ³¤
                                        // Ḭ̈߳²È«Ïà¹Ø
    mutex                m_mutex;
    condition_variable    m_cond;            // ½öÓÃÒ»¸öÌõ¼þ±äÁ¿À´»½ÐÑỊ̈߳¬µ«²¢²»Ó°ÏìÏß³ÌÔËÐÐ
    condition_variable  m_cond1;
    // Á¬½ÓÊýÁ¿
    atomic_int            m_num;            // Á¬½ÓµÄ×ÜÊýÁ¿
public:
    // »ñÈ¡µ¥Àý¶ÔÏóµÄ½Ó¿Ú
    static ConnectionPool* getConnectPool();
    // Óû§»ñÈ¡Á¬½ÓµÄ½Ó¿Ú, Èç¹û»ñȡʧ°Ü£¬»á·µ»Ønullptr
    shared_ptr<MysqlConn> getConnection();
};