回顾一下之前做的轻量级高并发网络服务器项目
项目部署在VMware的乌班图系统上,运行效果如下:
终端启动:
浏览器访问:
系统流程主线程用epoll这种多路复用机制监听客户端连接,当有read或者write事件发出请求时,将请求加入到线程池,线程池中的一个线程争抢到锁,开始执行任务,任务包括解析请求与生成响应,包括对信号的序列化与反序列化,最终发布的静态资源为js页面,这里简单让ai写了一个电子木鱼的效果并进行一些润色,系统适配Linux。
线程池类
head-only threadpool class
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include <pthread.h>
#include <cstdio>
#include <list>
#include <exception>
#include "locker.h"
using namespace std;
// 线程池类
template&...
这是一个轻量级异步日志器(async logger)。目标是用现代 C++(线程、互斥、条件变量)实现一个线程安全、低阻塞的日志写入方案:生产者将格式化后的日志消息推入队列,后台消费者线程异步写入文件并可选地输出到终端。整体实现包含一个简单的占位符格式化(暂用{},可自行修改)、类型到字符串的通用转换和优雅的后台线程关闭机制。
hpp
#ifndef MY_LOG
#define MY_LOG
#include <iostream>
#include <queue>
#include <mutex>
#include <string>
#include <condition_variable>
#include <thread>
#include <fstream>
#include <atomic>
#include <sstream>
#include <vector>
#include <stdexcept>
/**
* @brief 将单...
一些C++中经常会接触的概念,包括中间件,数据结构封装等模块
了解原理,实现基本功能,实际运用的时候还需要根据具体需求进行扩展和优化
一般肯定直接用STL封装好的
内存池 Memory Pool
共享指针 Shared Pointer
函数封装 Function Encapsulation
双向链表容器 List
双端队列容器 Deque
BST和AVL实现map
1. 基于二叉搜索树 (BST) 的实现
2. 基于 AVL 树的实现
无序映射表 unordered_map
单例模式 Singleton
内存池 Memory Pool内存池是一种预先分配一大块内存,然后按需分配小块内存的技术
内存池可以减少频繁的内存分配和释放操作从而提高性能
用一个栈实现:
classDiagram
class MemoryPool {
char* _pool
size_t _objectsize
size_t _totalsize
stack~void*~ _freelist
void* a...
什么是字符串匹配
暴力解法
KMP算法
具体实现
补充:
KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在一个主串中查找一个模式串的位置。它通过预处理模式串,避免了在匹配失败时重复比较已经匹配的部分,从而提高了匹配效率。
该算法在1977年被提出,取三位贡献者的姓名首字母组成算法名称。
什么是字符串匹配字符串匹配问题是计算机科学中的一个经典问题,其核心目标是在一个较长的文本串(Text)中查找是否存在一个或多个与给定模式串(Pattern)完全相同的子串。
例如:
文本串(T):"ABABDABACDABABCABAB"
模式串(P):"ABABCABAB"
那么模式串可以在文本串的索引11处匹配
暴力解法知道控制语句用法的人都知道,这个问题可以套两层循环来解决,从文本串的第1个字符开始,与模式串逐字符比对,如果发现不匹配,则从文本串的第2个字符开始重新比对,以此类推,该解法时间复杂度为$O(m*n)$,效率较低。
KMP算法KMP算法通过预处理模...
出于科研项目的需求,我需要开发一个能个性化定制界面与功能的BLE手机上位机软件,在经过简单的调研后,主要有以下两种开发路径:
Android Studio
MIT APP Inventor
其中AS需要Java基础,且开发周期长;MIT APP Inventor图形化编程,20min可上手,于是我选择后者,最终也能达到我想要的效果。
选择建议如下:
选 Android Studio:如果你想成为专业开发者,或开发功能复杂、可发布的商业应用。
选 MIT App Inventor:如果你是学生,或只想快速做一个简单应用
于是在B站看了几个包浆的教学视频后,我开始上手制作,过程意外地顺利
首先,你需要明确你的APP要包含哪些模块
如下图所示,在登陆官网后,你可以把你需要的模块在侧边栏拖入主页面
依次描述我的思路
上图中组件1是BLE设备搜索与断联按钮
2是BLE连接状态,3是波形图,4是实时数值,5是清空按钮;
当然也有后端组件Ⅰ,是BLE模块,这个在官网没有,需要下载拓展包,https://iot.appinventor.mit.edu/ 这个网站里可以...