#pragma once
|
#include "ConnectMysql.h"
|
#include <queue>
|
#include <mutex>
|
#include <thread>
|
#include <atomic>
|
#include <condition_variable>
|
|
using namespace std;
|
|
/*¸ÅÄÊý¾Ý¿âÁ¬½Ó³ØÊdzÌÐòÆô¶¯Ê±½¨Á¢×ã¹»µÄÊý¾Ý¿âÁ¬½Ó£¬²¢½«ÕâЩÁ¬½Ó×é³ÉÒ»¸öÁ¬½Ó³Ø£¬ÓɳÌÐò¶¯Ì¬µØ¶Ô³ØÖеÄÁ¬½Ó½øÐÐÉêÇ룬ʹÓã¬ÊÍ·Å¡£
|
×÷Óãº
|
1.×ÊÔ´ÖØÓ㬱ÜÃâÁËÊý¾Ý¿âÁ¬½ÓƵ·±½¨Á¢¡¢¹Ø±ÕµÄ¿ªÏú
|
2.¸ü¿ìµÄϵͳÏìÓ¦ËÙ¶È£¬Ö±½Ó´ÓÁ¬½Ó³ØÖлñÈ¡Á¬½Ó£¬ÏìÓ¦Ëٶȼӿì
|
3.¿ØÖÆ×ÊÔ´µÄʹÓá£Èç¹û²»Ê¹ÓÃÁ¬½Ó³Ø£¬Ã¿´Î·ÃÎÊÊý¾Ý¿â¶¼ÐèÒª´´½¨Ò»¸öÁ¬½Ó£¬ÕâÑùϵͳµÄÎȶ¨ÐÔÊÜϵͳÁ¬½ÓÐèÇóÓ°ÏìºÜ´ó£¬ºÜÈÝÒײúÉú×ÊÔ´À˷Ѻ͸߸ºÔØÒì³£¡£Á¬½Ó³ØÄܹ»Ê¹ÐÔÄÜ×î´ó»¯£¬½«×ÊÔ´ÀûÓÿØÖÆÔÚÒ»¶¨µÄˮƽ֮Ï¡£Á¬½Ó³ØÄÜ¿ØÖƳØÖеÄÁ¬½ÓÊýÁ¿£¬ÔöÇ¿ÁËϵͳÔÚ´óÁ¿Óû§Ó¦ÓÃʱµÄÎȶ¨ÐÔ¡£
|
*/
|
|
class ConnectionPool// Á¬½Ó³ØÀà, µ¥Àýģʽ--ÀÁºº
|
{
|
private:
|
ConnectionPool();
|
ConnectionPool(const ConnectionPool&) = delete;
|
ConnectionPool& operator=(const ConnectionPool&) = delete;
|
~ConnectionPool();
|
|
bool parseConfig(); // ½âÎöÅäÖÃÎļþ
|
|
bool addConnection(); // Ìí¼ÓеÄÊý¾Ý¿âÁ¬½Óµ½Á¬½Ó³Ø
|
|
void producer(); // Éú²úÕßÏ̺߳¯Êý£¬¸ºÔð´´½¨ÐÂÁ¬½Ó
|
|
void recycler(); // »ØÊÕÕßÏ̺߳¯Êý£¬¸ºÔð»ØÊÕ¿ÕÏÐÁ¬½Ó
|
|
queue<ConnectMysql*> m_connections; // ´æ·ÅÊý¾Ý¿âÁ¬½Ó³Ø½¨Á¢µÄÁ¬½Ó
|
|
string m_ip = "192.168.133.129";// IP
|
unsigned short m_port = 3306;// ¶Ë¿Ú
|
string m_user = "root";// Óû§Ãû
|
string m_passwd = "1";// ÃÜÂë
|
string m_dbName = "AI_datas";// Êý¾Ý¿âÃû
|
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* getInstance(); // »ñÈ¡Á¬½Ó³Øµ¥Àý¶ÔÏó
|
|
shared_ptr<ConnectMysql> getConnection(); // ´ÓÁ¬½Ó³Ø»ñȡһ¸öÊý¾Ý¿âÁ¬½Ó
|
};
|