From cec6937344e179a6db50c6386b24afcff165561f Mon Sep 17 00:00:00 2001
From: zyf <2786722087@qq.com>
Date: 星期三, 02 四月 2025 09:21:04 +0800
Subject: [PATCH] zyf_0402_log

---
 /dev/null                        |   57 ---------------------------------------------------------
 Server/张怡帆/log/~WRL1218.tmp      |    0 
 Server/张怡帆/log/日志_张怡帆_250402.doc |    0 
 3 files changed, 0 insertions(+), 57 deletions(-)

diff --git "a/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.cpp" "b/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.cpp"
deleted file mode 100644
index 92964d3..0000000
--- "a/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.cpp"
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "ConnectionPool.h"
-
-ConnectionPool::ConnectionPool()
-{
-	if (!parseConfig()) {
-		cerr << "解析失败!" << endl;
-		return;
-	}
-	for (m_num = 0; m_num < m_minSize;) {
-		bool flag = addConnection();
-		if (!flag) {
-			return;
-		}
-	}
-	thread producerThread(&ConnectionPool::producer, this);
-	thread recyclerThread(&ConnectionPool::recycler, this);
-	producerThread.detach();
-	recyclerThread.detach();
-}
-
-ConnectionPool::~ConnectionPool()
-{
-	while (!m_connections.empty()) {
-		ConnectMysql* conn = m_connections.front();
-		m_connections.pop();
-		delete conn;
-		cout << "连接已断开" << endl;
-	}
-}
-
-//解析配置文件函数实现
-bool ConnectionPool::parseConfig()
-{
-	m_ip = "192.168.133.129";
-	m_port = 3306;
-	m_user = "root";  // 替换为实际的数据库用户名
-	m_passwd = "1"; // 替换为实际的数据库密码
-	m_dbName = "AI_datas";   // 替换为实际的数据库名
-	m_minSize = 1;
-	m_maxSize = 20;
-	m_timeout = 1000;
-	m_maxIdleTime = 60000;
-	return true;
-}
-
-// 添加数据库连接到连接池的函数实现
-bool ConnectionPool::addConnection()
-{
-	ConnectMysql* conn = new ConnectMysql;
-	bool res = conn->connect(m_user, m_passwd, m_dbName, m_ip, m_port);
-	if (res) {
-		conn->refreashAliveTime();//设置连接存活时间
-		m_connections.push(conn);//将连接添加到连接池中
-		++m_num;
-		cout << "连接成功!" << endl;
-		return true;
-	}
-	else {
-		delete conn;
-		cerr << "连接失败!" << endl;
-		return false;
-	}
-}
-
-//创建新连接函数实现
-void ConnectionPool::producer()
-{
-	while (true) {
-		unique_lock<mutex> lock(m_mutex);
-		m_cond.wait(lock, [this] { return m_connections.empty() && m_num < m_maxSize; });//线程等待,直到连接池为空或者连接数小于最大连接数
-		if (m_num < m_maxSize) {
-			bool flag = addConnection();
-			if (!flag) {
-				cerr << "创建新连接失败!" << endl;
-				return;
-			}
-		}
-		m_cond1.notify_all();
-	}
-}
-
-//回收空闲连接函数实现
-void ConnectionPool::recycler()
-{
-	while (true) {
-		this_thread::sleep_for(chrono::milliseconds(500));//休眠0.5秒
-		lock_guard<mutex> lock(m_mutex);
-		while (!m_connections.empty() && m_num > m_minSize) {
-			ConnectMysql* conn = m_connections.front();
-			if (conn->getAliveTime() >= m_maxIdleTime) {
-				m_connections.pop();
-				delete conn;
-				--m_num;
-				cout << "回收空闲连接" << endl;
-			}
-			else {
-				break;
-			}
-		}
-	}
-}
-
-//获取连接池对象函数实现
-ConnectionPool* ConnectionPool::getInstance()
-{
-	// 不使用互斥锁的线程安全的懒汉模式
-	static ConnectionPool pool;// 静态局部变量,只初始化一次
-	return &pool;
-}
-
-//获取连接函数实现
-shared_ptr<ConnectMysql> ConnectionPool::getConnection()
-{
-	unique_lock<mutex> lock(m_mutex);
-	while (m_connections.empty()) {
-		if (cv_status::timeout == m_cond1.wait_for(lock, chrono::milliseconds(m_timeout))) { // 是否因为超时而退出等待
-			if (m_connections.empty()) { // 超时且连接池仍为空,返回空指针
-				cerr << "获取连接超时,连接池为空!" << endl;
-				return nullptr;
-			}
-		}
-	}
-	shared_ptr<ConnectMysql> conn(m_connections.front(), [this](ConnectMysql* conn) {
-		unique_lock<mutex> lc(m_mutex);
-		conn->refreashAliveTime();
-		m_connections.push(conn);
-		cout << "连接已归还到连接池!" << endl;
-		});
-	m_connections.pop();
-	m_cond.notify_all();
-	cout << "从连接池获取连接成功!" << endl;
-	return conn;
-}
\ No newline at end of file
diff --git "a/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.h" "b/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.h"
deleted file mode 100644
index 7538afe..0000000
--- "a/Server/\345\274\240\346\200\241\345\270\206/code/ConnectionPool.h"
+++ /dev/null
@@ -1,57 +0,0 @@
-#pragma once
-#include "ConnectMysql.h"
-#include <queue>
-#include <mutex>
-#include <thread>
-#include <atomic>
-#include <condition_variable>
-
-using namespace std;
-
-/*概念:数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
-作用:
-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();	// 从连接池获取一个数据库连接
-};
diff --git "a/Server/\345\274\240\346\200\241\345\270\206/log/~WRL1218.tmp" "b/Server/\345\274\240\346\200\241\345\270\206/log/~WRL1218.tmp"
new file mode 100644
index 0000000..870dc7a
--- /dev/null
+++ "b/Server/\345\274\240\346\200\241\345\270\206/log/~WRL1218.tmp"
Binary files differ
diff --git "a/Server/\345\274\240\346\200\241\345\270\206/log/\346\227\245\345\277\227_\345\274\240\346\200\241\345\270\206_250402.doc" "b/Server/\345\274\240\346\200\241\345\270\206/log/\346\227\245\345\277\227_\345\274\240\346\200\241\345\270\206_250402.doc"
new file mode 100644
index 0000000..8fb7d75
--- /dev/null
+++ "b/Server/\345\274\240\346\200\241\345\270\206/log/\346\227\245\345\277\227_\345\274\240\346\200\241\345\270\206_250402.doc"
Binary files differ

--
Gitblit v1.8.0