DP_S/include/CConnectPool.h

91 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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
* 支持多线程使用完成后需调用PutConnect归还连接本函数调用后立刻返回若没有空闲连接则返回NULL
* @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();
*/