DP_S/include/CConnectPool.h

91 lines
2.2 KiB
C
Raw Permalink Normal View History

2024-04-24 10:25:44 +08:00
#pragma once
#ifndef CCONNECT_POOL_H_2021
#define CCONNECT_POOL_H_2021
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#include <set>
#include <pthread.h>
#include <unistd.h>
#include "mysql/mysql.h"
class CConnectPool
{
public:
struct Connect_Info
{
int MinConnectCount;
int MaxConnectCount;
const char *Host;
int Port;
const char *Account;
const char *Passwd;
const char* KName;
};
Connect_Info My_Info;
public:
/**
* @brief \n
* 线FreePool予以释放
*
*/
static void
CreatePool(int MinConnectCount, int MaxConnectCount, const char *Host, int Port, const char *Account, const char *Passwd);
/**
* @brief \n
* 线
*/
static void FreePool();
/**
* @brief \n
* 线使PutConnect
* @return
* --NULL表示调用失败
*/
static MYSQL *GetConnect();
/**
* @brief \n
* 线使PutConnectNULL
* @return
* --NULL表示调用失败
* */
static MYSQL *TryGetConnect();
/**
* @brief \n
* 线
* @param[in] pConn
* */
static void PutConnect(MYSQL *pConn);
private:
CConnectPool();
~CConnectPool();
MYSQL *_GetConnect(bool bTry);
void _PutConnect(MYSQL *pConn);
// 真正创建连接
MYSQL *_CreateConnect();
static CConnectPool *s_pInstance;
std::queue<MYSQL *> m_queueFree; // 空闲队列
std::set<MYSQL *> m_setBusy; // 繁忙队列
pthread_mutex_t m_mutex;
pthread_cond_t m_cond;
};
#endif
/*
使
CConnectPool::CreatePool();
MYSQL *sql = CConnectPool::GetConnect();
CConnectPool::PutConnect(sql);
CConnectPool::FreePool();
*/