C++项目 | 集群聊天服务器 | CMake
C++项目 | 集群聊天服务器 | CMakeCMake简介使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。 CMake安装ubuntu上直接执行 sudo apt install cmake 安装完成,可以通过cmake -version查看其版本: 1234darling@darling:~/桌面/chat_sever$ cmake --versioncmake version 3.28.3CMake suite maintained and supported by Kitware (kitware.com/cmake). CMake使用介绍1.与项目相关的部分就是使用一下CMake,编译一下我们的测试文件muduo_server.cpp 0.类比g++1g++ -o server -g muduo_server.cpp xxx.cpp -I/usr/include -L/usr/lib -lmuduo_net -lmuduo_base...
C++项目 | 集群聊天服务器 | Json
C++项目 | 集群聊天服务器 | JsonJson介绍Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 我们知道TCP是字节流,所以我们需要把发送的消息数据给序列化,用的工具就是Json。 发送到对端再反序列化还原数据。 一个优秀的Json三方库JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。 具有以下特点 1.直观的语法 2.整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便 3.使用 C++ 11 标准编写 4.使用 json 像使用 STL 容器一样 5.STL 和 json 容器之间可以相互转换 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind...
C++项目 | 集群聊天服务器 | 工程目录创建
C++项目 | 集群聊天服务器 | 工程目录创建1.目录创建 1.-bin 生成的最终的可执行文件 2.-include 头文件 server存放服务器端用到的 client存放客户端用到的 3.-src 源代码文件 server存放服务器端用到的 client存放客户端用到的 4.-build 编译过程中产生的临时文件 5.-test 示例代码测试文件 6.-thridparty 第三方库的源码文件 直接把第三方库的源码拿了过来集成到了自己的项目中 7.-CMakeLists.txt 8.-autobuild.sh 一键编译 将json.hpp放入thridparty中 2.CMake编写顶级CMake 12345678910111213141516171819# 项目所需cmake的最低版本cmake_minimum_required(VERSION 3.0)#项目的名称project(chat)#配置编译选项 对应第2项set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}...
基于C++11线程池项目博客目录汇总
基于C++11线程池项目博客目录汇总线程池 | C++ | 项目实战-CSDN博客 线程池 | Any、Semaphore类-CSDN博客 线程池 | Result、Task类-CSDN博客 线程池 | ThreadPool的submitTask和threadFunc方法-CSDN博客 线程池 | Thread、ThreadPool类-CSDN博客 线程池 | 测试代码-CSDN博客 线程池 | Linux平台编译线程池动态库-CSDN博客 基于C++14和C++17的改进版本: packaged_task 、future知识点-CSDN博客 线程池 | 改进版-CSDN博客
线程池 | Linux平台编译线程池动态库
线程池 | Linux平台编译线程池动态库环境:ubuntu24.04 1.编译 1g++ -fPIC -shared threadPool.cpp -o libtdpool.so -std=c++17 g++版本至少要在5.5以上才可以 12345678910一般程序在/usr/lib /usr/local/lib找.a静态库和.so动态库的在/usr/include/usr/local/include找*.h头文件的 所以要把.so放入对应位置 12sudo mv libtdpool.so /usr/local/libsudo mv threadpool.h /usr/local/include 删除threadPool.cpp 1g++ 测试.cpp -std=c++17 -ltdpool 2.运行1./a.out 发现不能直接运行有报错。 原因: 运行时的动态库目录和编译时不一样的 1cd /etc/ld.so.conf.d 1sudo vim...
packaged_task 、future知识点
packaged_task 、future知识点以下是对 packaged_task 和 future 的详细解释,尽量简单易懂并结合例子说明: 1. packaged_task 基本概念: packaged_task 是一个类模板,它将一个可调用对象(如函数、函数对象、lambda 表达式等)和一个 future 关联起来。它可以将可调用对象的结果存储在 future 中,以便在将来的某个时间点获取结果。 可以将 packaged_task 看作是一个任务包装器,它包装了一个任务,并允许你在另一个线程中执行该任务,同时提供一种机制,让你可以在其他地方获取该任务的结果。 使用示例: 12345678910111213141516171819202122#include <iostream>#include <thread>#include <future>#include <functional>int add(int a, int b) { return a + b;}int main()...
线程池 | 改进版
线程池 | 改进版1.改进点1.如何能让用户提交任务的过程更加简单方便? 1234从pool.submitTask(std::make_shared<MyTask>(1,...
线程池 | 测试代码
线程池 | 测试代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include"threadpool.h"#include<chrono>using namespace std;/*有些场景是希望能够获取线程执行任务的返回值的举例:1+.....+30000的和thread1 1+..+10000thread2 10001+...+20000....main thread:给每个线程分配计算的区间,并等待算完的结果最后合并*/class MyTask :public Task{public: MyTask(int begin,int...
线程池 | Thread、ThreadPool类
线程池 | Thread、ThreadPool类1.线程池支持的模式123456//线程池支持的模式enum class PoolMode{ MODE_FIXED,//固定数量的线程 MODE_CACHED,//线程数量可动态增长}; 2.Thread类12345678910111213141516171819202122//线程类型class Thread{public: using ThreadFunc = std::function<void(int)>; //线程构造 Thread(ThreadFunc func); //线程析构 ~Thread(); //启动线程 void start(); //获取线程id int getId() const;private: ThreadFunc func_;//回调函数 static int generateId_;//单调自增的一个id,用来标识一个线程 int...
线程池 | ThreadPool的submitTask和threadFunc方法
线程池 | ThreadPool的submitTask和threadFunc方法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263//线程池类型class ThreadPool{public: ThreadPool(); ~ThreadPool(); //设置线程池工作模式 void setMode(PoolMode mode); //设置task任务队列上限阈值 void setTaskQueMaxThresHold(int threshold); //设置线程池cached模式下线程数量上限 void setthreadSizeThresHold(int threshold); //给线程池提交任务 Result submitTask(std::shared_ptr<Task> sp); //启动线程池 返回值是当前电脑的CPU核心数量 void start(int...