- 博客(37)
- 资源 (3)
- 收藏
- 关注
原创 grpc流式传输示例(c++)
grpc是结合protobuf的远程调用框架,服务端和客户端均支持同步和异步模式。同步模式下,服务器的service函数会阻塞,且当前线程不能再服务其它的client,类似于多线程模式,一个线程服务一个client,可通过ResourceQuota设置最大线程数;异步模式下,grpc提供类似poll方式管理事件,用户注册事件,并接收通知,一个线程管理一个CompletionQueue,通过轮询管理clients,线程模型可以用户自定义,在追求性能的情况下官方推荐异步模式。
2022-12-16 17:14:14
3286
原创 c++ 后台小练习--基于Vue的在线记事本
数据库采用cpp_redist实现的连接池。前后端主要有获取事项,增加事项,删除事项几个简单的功能。前端使用vue3,后端使用。
2022-09-02 13:04:18
1143
原创 多线程数据竞争和代码规范
Rester是基于eventloop和epoll的并发服务器,实现过程中发现了数据竞争的问题,对其进行分析并规范了原始代码。
2022-08-29 22:38:29
306
1
原创 堆栈大小设置过大的未定义行为
背景同样的程序,在两个不同的计算机上运行。台式电脑运行正确,一点错没有,但是当我把程序放到笔记本上运行时,出现了莫名奇妙的错误。win32的打开文件对话框出现问题,打开直接没有反应,每次重启之后才能能打开文件选择界面,但是没办法跳转到其它路径,只能选择默认路径下的文件。 ok,手动改默认路径,选到心仪的文件,问题又来了。thread_monitor::launch: _beginthreadex failed,报这个错,锁定函数,发现是并行库tbb的问题,一顿操作(搜索),似乎就我自己有这样的问题
2022-03-31 10:22:44
547
2
原创 c++手写一个json库
Json test0 = Object{ { "key1", "value1" }, { "key2", "好"}, { "key3", Array { 1, 2, 3 } }, };
2022-03-19 11:53:37
7304
6
原创 Rester---基于ET和Eventloop实现的的多线程http服务器
进一步熟悉linux网络编程,事件循环,http协议。《Linux多线程服务端编程(muduo)》
2022-03-12 10:24:36
2628
原创 C++ 程序调试工具类
用于阶段运行时间的计时器TS 多次运算平均时间计时器TC如何消除计时器本身构造的时间开销?用于数据分布情况统计的DataCount, 用matplot++做数据可视化数据溢出时如何求平均值?用于分隔符输出数字,行内输出不同类型的数据的输出函数int p=std::pow(10,N),输出结果为何存在999 9999等-1的误差,怎么解决? githubhttps://github.com/hjhj111/Tools...
2021-09-19 21:18:43
424
原创 正则表达式解析Http请求
正则表达式解析Http请求正则表达式解析Http请求正则表达式解析Http请求1 代码2 解析1 代码#pragma once#include<string>#include<unordered_map>#include<regex>#include<vector>using namespace std;//methodconst char methodGet[] = "GET";const char methodPost[] = "P
2021-07-03 19:05:49
2046
原创 effective modern c++(条款31-42)lambda表达式,并发API,微调
effective modern c++(条款31-42)lambda表达式,并发API,微调条款31--避免默认捕捉模式条款32--使用初始化捕捉将对象移入闭包条款33--对auto&&型别的形参使用decltype,以std::forward辅之条款34--优先选用lambda式,而非std::bind条款35--优先选用基于任务而非基于线程的程序设计条款36--如果异步是必要的,则指定std::launch::async条款37--使std::thread型别对象在所有路径皆不可联结条
2020-08-17 21:10:50
498
原创 effective modern c++(条款18-30)智能指针,右值引用,移动语义和完美转发
effective modern c++(条款18-30)智能指针,右值引用,移动语义和完美转发条款18--使用std::unique_ptr管理具备专属所有权的资源条款19--使用std::shared_ptr管理具备共享所有权的资源条款20--对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr条款21--优先选用std::make_unique和std::make_shared,而非直接使用new条款22--使用Pimpl习惯用法时,将特殊成员函数的定义放到实现文件条
2020-08-17 18:06:51
390
原创 effective modern c++(条款5-17)auto,转向现代c++
effective modern c++(条款5-17)auto,转向现代c++条款5--优先使用auto,而非显式型别声明条款6--当auto推导的型别不符合要求时,使用带显示型别的初始化物习惯用法条款7--在创建对象时区分()和{}条款8--优先使用nullptr,而非0或NULL条款9--优先选用别名声明,而非typedef条款10--优先选用限定作用域的枚举型别,而非不限定作用域的枚举型别条款11--优先选用删除函数,而非private未定义函数条款12--为意在改写的函数添加override声明条
2020-08-17 16:41:36
318
原创 effective modern c++(条款1-4)型别推导
effective modern c++(条款1-4)型别推导条款1--理解模板型别推导条款2--理解auto型别推导条款3--理解decltype条款4--掌握查看型别推导结果的方法条款1–理解模板型别推导具有引用型别的实参会被当成非引用型别来处理对万能引用形参推导时,左值会进行特殊处理按值传递,忽略const volatile数组或者函数型别推导,实参会退化为指针,除非被用来初始化引用条款2–理解auto型别推导auto会假定使用大括号括起来的初始化表达式代表一个std::initi
2020-08-17 12:34:54
198
原创 史上最简练的effective c++(条款49-55)new,delete,杂项讨论
史上最简练的effective c++(条款49-55)new,delete,杂项讨论条款49-了解new-handler的行为条款50-了解new和delete的合理替换时机条款51-编写new和delete时需固守常规条款52-写了placement new 也要写placement delete条款53-不要轻忽编译器的警告条款54-让自己熟悉TR1在内的标准程序库条款55-让自己熟悉Boost条款49-了解new-handler的行为可用std::set_new_handler设置new处理函数
2020-08-17 11:48:06
144
原创 史上最简练的effective c++(条款41-48)模板与泛型编程
史上最简练的effective c++(条款41-48)模板与泛型编程条款41-了解隐式接口和编译期多态条款42-了解typename的双重意义学习处理模板化基类内的名称条款44-将与参数无关的代码抽离template条款45-运用成员函数模板接受所有兼容类型条款46-需要类型转换时请为模板定义非成员函数条款47-请使用traits classes 表现类型信息条款48-认识template元编程条款41-了解隐式接口和编译期多态隐式接口,即是template的接口,在编译期才生成具体函数,多态也基于表
2020-08-17 11:23:41
312
原创 史上最简练的effective c++(条款32-40)
史上最简练的effective c++(条款32-40)条款32-确定你的public继承模塑出is-a关系条款33-避免遮掩继承而来的名称条款34-区分接口继承和实现继承条款35-考虑virtual函数以外的其它选择条款36-绝不重新定义继承而来的non-virtual 函数条款37-绝不重新定义继承而来的缺省参数值条款38-通过复合塑模出has-a或“根据某物实现出”条款39-明智而审慎地使用private继承条款40-明智而审慎地使用多重继承条款32-确定你的public继承模塑出is-a关系di
2020-08-17 09:56:26
155
原创 C++实战--QT实现扫雷
C++实战–QT实现扫雷效果mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include<cmine.h>QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow : public QMainWindow{ Q_OBJECT
2020-08-09 16:49:18
1456
原创 C++实战--QT实现文件行数统计表
C++实战–QT实现文件行数统计表效果mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QDir>#include <QVector>QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow : public Q
2020-08-08 12:21:25
1713
原创 C++实战--QT实现俄罗斯方块
C++实战–QT实现俄罗斯方块效果源码terismainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QKeyEvent>#include "tetris.h"QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow :
2020-08-07 17:17:58
2611
原创 C++实战--QT实现迷你相机
C++实战–QT实现迷你相机效果MainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QCamera>#include <QCameraViewfinder>#include <QCameraImageCapture>#include <QQueue>#include <QVector>#inc
2020-08-06 20:45:39
639
原创 C++11并发--实现线程池
C++11并发–实现线程池实现一个线程池类,并加以测试Thread_Pool.h#pragma once#include<iostream>#include<mutex>#include<thread>#include<condition_variable>#include<vector>#include<queue>#include<functional>#include<memory>
2020-08-06 10:37:54
265
原创 C++实战--QT实现五子棋
C++实战–QT实现五子棋效果更多效果小破站框架在基类Board中实现单机的五子棋,在继承其的子类Tcp_Board中添加网络通信的部分。Board或者Tcp_Board作为MainWindow的一个子窗口。board.h#ifndef BOARD_H#define BOARD_H#include <QWidget>#include <vector>class Board : public QWidget{ Q_OBJECTpubl
2020-08-05 15:03:59
2122
3
原创 二叉树前序遍历、中序遍历、后序遍历的迭代版
二叉树前序遍历、中序遍历、后序遍历的迭代版前序遍历void preorder(TreeNode* root){ if(root==NULL) return; stack<TreeNode*> s; while(root||!s.empty()) { while(root) { //...处理root
2020-08-02 17:37:04
188
原创 C++并发(四)
C++并发(四)mutexrecursive_mutex 递归锁,防止函数递归调用引起的死锁。try_lock();timed_mutex recursive_timed_mutex对应try_lock_for()或者try_lock_until();std::timed_mutex m;if(m.try_lock_for(std::chrono::seconds(1))){ std::lock_guard<std::timed_mutex> gm(m,std::adop
2020-08-01 11:31:17
129
原创 C++11并发(三)
C++11并发(三)wait_for()和wait_until()都不会令延迟的线程启动,只有get()和wait()会。并发处理同一容器的不同元素是可以的,vector例外。并发处理string steam file stream stream buffer会导致不明确行为,但是标准stream可以。volatile防止对变量内存过渡优化。并发的两个关键问题,不可分割性(atomicity)、次序(oder)。并发的风险控制关键,数据竞争。...
2020-08-01 07:18:52
160
原创 C++并发(二)
C++并发(二)C++并发(一)低级接口thread和promise与高级接口的区别thread对象没有发射策略,尽量开启新线程。没有接口获取线程结果,只有线程ID。必须用exception_ptr导出异常,否则一旦线程异常溢出,程序terminate()。线程必须join()或者detach(),否则terminate(),线程发生移动分配,一样terminate().线程在main()结束前未终止,强行终止。threadquick_exit()结束程序时不析构global和stat
2020-07-31 22:11:51
145
原创 C++11并发(一)
C++11并发(一)头文件#include<thread>//线程头文件#include<chrono>//时间相关函数高级接口std::future<int> result1(std::async(func1));int result2=func2();int resulit=result1.get()+result2;func1()在不支持线程或无线程可用时,通过get()会同步执行,否则益步执行。要遵循 call early and r
2020-07-31 16:29:53
162
原创 C++ stl标准库的一些忽略细节
stringassign();append();int find(const chars, int pos,int n) const; //查找s中以pos为起点,长度为n的串在调用者的第一次出现的位置;int rfind(const char s,int pos,int n) const; //最后一次出现位置;string substr(int pos =0,int n=npos) const; //返回由pos开始的n个字符组成的字符串;vectora.swap(b)元.
2020-07-21 09:26:23
106
原创 史上最简练的effective c++(条款26-31)实现
史上最简练的effective c++(条款26-31)实现条款26——尽可能延后变量定义式出现的时间为了避免异常抛出,早声明的变量未使用;循环中中的定义应该大多数情况下移到循环之前;条款27——尽量少做转型动作const_cast:常量性移除;dynamic_cast: 向下转型;reinterpret_cast:低级转型,比如指针转非指针;static_cast:强迫隐式转换,无法转化const;如果转型必要,尽量隐藏在函数背后,避免用户不必要的麻烦;试着用virrtual、重载、
2020-07-16 15:51:20
253
原创 史上最简练的的effective c++(条款18-25)设计与声明
史上最简练的的effective c++(条款18-25)设计与声明条款18——让接口容易被正确使用,不易被误用保持接口的一致性,以及内置类型的行为兼容;防止误用,建立新类型以约束用户输入参数,应用智能指针,消除用户资源管理的责任;shared_ptr可以防范DLL问题(跨DLL的new和delete),应用其诞生的DLL的delete;条款19——设计class犹如设计type考虑创建与销毁(构造、析构)、初始化与赋值(复制构造、赋值运算符)、参数形式、参数合法性、继承性、隐式/显式类
2020-07-16 15:02:36
140
1
原创 史上最简练的effective c++(条款13-17)资源管理
史上最简练的effective c++(条款13-17)资源管理条款13——以对象管理资源两个关键想法:获得资源后立刻放进管理对象,管理对象运用析构函数确保资源被释放;auto_ptr:不可复制,复制后原先的指针变成NULL,不可指向数组,因为其析构函数中使用的是delete方法,取而代之的是c++的string vector等数组类;shared_ptr:共享,指针数可增加,为零时销毁资源;weak_ptr:指向shared_ptr的资源,不增加计数,访问资源必须转化为shared_ptr;
2020-07-16 12:48:53
143
原创 史上最简练的effective c++(条款05-12)构造/析构/赋值运算
史上最简练的effective c++(条款05-12)构造/析构/赋值运算条款05——了解C++默默编写并调用了哪些函数复制构造函数复制运算符函数默认构造函数析构函数当默认的复制构造函数、复制运算符函数违背C++规则时,不会默认生成对应函数,例如,成员变量有const成员,无法被赋值。条款06——若不想使用自动生成的函数,可以明确拒绝 ;可以声明为delete;可以声明为private并不去实现它。条款07—— 为多态基类声明virtual 析构函数为了销毁drived
2020-07-15 17:58:31
135
原创 史上最简练的effective c++(条款01-04)让自己习惯c++
史上最简练的effective c++(条款01-04)让自己习惯c++条款01——视C++为一个语言联邦c :区块、语句、预处理、内置数据类型、指针内置数组等基本部分;Object-Oriented C++:面向对象的类、封装、继承、多态等;Template:泛型编程,即模板元编程(TMP);STL:Template程序库,主要包含容器、迭代器、算法;条款02——尽量以const、enum、inline替换#define(用编译器替换预处理器)#define常量时,预处理后,编译时将正文中
2020-07-15 16:41:38
191
原创 linux(centos7.4)vi常用命令
linux(centos7.4)vi常用命令vi打开一个文件,不存在则新建;分为命令行模式和编辑模式,打开后首先进入命令行模式;i 从光标所在位置前插入;a 从光标所在字符后面插入;o 从光标所在行的下一行插入空白行;O 从光标所在行上面一行插入空白行;I 在 光标所在行行首插入;A在光标所在行行尾插入;kjhl光标上下左右,操作距离短,熟练掌握;ctrl+u ctrl+d 上下翻页;gg 跳到文件第一行;G跳到文件最后一行;(在命令行模式下)nG光标移到n行行首;0跳到光标所在
2020-07-13 15:50:10
260
原创 linux(centos7.4)常用命令(1)
linux(基于vmworkstation的centos7.4)基本命令学习(1)用户切换su - root或者su -切换到root;su - username切换任一用户;root切换至其它用户不需要密码,切换至root需要密码;关机或重启init 0关机;init 6重启;exit登出当前用户;清屏clear 清除终端历史立式命令记录;查看网络配置参数ifconfig是centos6的命令,网卡是eth0;centos7是ip addr,网卡是ens33;系统编码格式l
2020-07-12 16:03:26
330
原创 QT实现OPENGL三维画图(视角可调整)
QT实现OPENGL画图继承QOpenGLWidget和QOpenGLFunctions实现自定义窗口类。重写QOpenGLWidget的虚函数void paintGL() override;void initializeGL() override;void mouseMoveEvent(QMouseEvent*)override;void mousePressEvent(QMouseE...
2020-04-29 15:36:04
4204
whack-a-mole.zip
2020-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人