C/C++
文章平均质量分 85
独孤过
精诚所至,金石为开
展开
-
C++服务器方向
服务器包括数据结构与算法、操作系统原理、计算机网络、数据库原理等基础课程。服务器涉及网络编程、并发编程、并行计算、分布式计算和数据库设计等通用技术。原创 2023-05-28 13:20:30 · 194 阅读 · 0 评论 -
C/C++参考资料
C++参考手册推荐书籍“准”标准库并行库Lua参考手册原创 2023-05-11 13:57:00 · 825 阅读 · 0 评论 -
编译依存性
在改动源文件之后,源文件只需要单独编译并链接。而在改动头文件之后,直接或者间接引用头文件的源文件都需要重新编译并链接,这是文件间的编译依存性。降低编译依存性之构想:相依于声明式,不相依于定义式。编译依存性最小化的本质是接口与实现分离,其关键在于以声明依存性替换定义依存性。接口与实现分离用于隐藏实现细节,而内联的前提是显示实现细节,二者相互矛盾。采用实现细节隐藏技巧,意味着仅限定义式所在源文件定义与调用内联函数。编译器优化策略可以无视内联局限性。原创 2021-06-28 13:44:05 · 297 阅读 · 0 评论 -
C++17 强化条件变量类模板
条件变量只激活进入等待队列的线程,无法确保激活在阻塞之后,存在激活先于阻塞问题。结合条件变量、谓词和临界区,封装强化条件变量。以谓词决定阻塞和激活,两种操作分别放于临界区,确保操作互斥。似此只存在两种情况,一种是激活在阻塞之后,另一种是谓词为真而线程不必阻塞,足以应对激活先于阻塞问题。原创 2021-06-25 03:48:09 · 942 阅读 · 1 评论 -
Visual Studio 2017编译Lua 5.3.5
下载地址官方网站:http://www.lua.org/ftp/创建项目静态库动态库解释器编译器原创 2020-04-22 22:16:30 · 804 阅读 · 0 评论 -
Ubuntu 16.04安装Qt Creator 5.9.7
于Qt官网:http://download.qt.io/archive/qt下载qt-opensource-linux-x64-5.9.7.run至/root/Downloads目录进入Downloads目录cd /root/Downloads/获取执行权限sudo chmod +x qt-opensource-linux-x64-5.9.7.run运行图形化界面安装程序./qt...原创 2018-12-20 18:32:31 · 2478 阅读 · 0 评论 -
Ubuntu 16.04编译FFmpeg 4.1
于FFmpeg官网:http://www.ffmpeg.org/download.html下载ffmpeg-4.1.tar.bz2至Downloads目录进入Downloads目录cd /root/Downloads/解压tar -jxvf ffmpeg-4.1.tar.bz2进入解压所得文件夹cd ffmpeg-4.1/更新软件源sudo apt-get update...原创 2018-12-20 18:45:52 · 3920 阅读 · 1 评论 -
快速排序之代码问题
快速排序的问题 无限循环 错误赋值 不同形式 最大容量实现快速排序之时,如果不注意细节,可能遗留一些漏洞。无限循环有一种实现看似能够正常排序,其实存在无限循环的隐患。当左右游标索引元素与中轴元素相等,由于无法进入内层循环,左右游标无法移动,导致无限循环。原创 2020-03-13 16:38:18 · 281 阅读 · 0 评论 -
线程池性能测试
Eterfree线程池以一个基于Boost程序库的线程池为参照线程池,分别在不同硬件、不同操作系统的计算机对两种线程池进行性能测试。最近一次以Visual Studio 2019编译x64 Release版本的测试程序,一共进行10次测试,每次测试以100个线程执行300000个相同任务。记录线程池执行的任务数和所用时间,计算每毫秒执行的任务数,最终取执行任务的平均速度。原创 2019-05-15 13:05:18 · 2049 阅读 · 0 评论 -
智能指针std::shared_ptr之循环引用
类的成员变量包含共享指针,假设类的两个实例由共享指针管理,分别称为此实例与彼实例,此实例的共享指针指向彼实例,而彼实例的共享指针指向此实例。上述情况可以视为,由共享指针管理的外层对象持有内层对象,而内层对象以共享指针形式直接或者间接引用外层对象。销毁外层对象的前提是内层对象不再引用外层对象,而内层对象在析构之时才解除引用,即必须先销毁外层对象。似此对象之间跨层级相互引用,而无法解除引用关系,形成循环引用。原创 2019-10-23 03:46:59 · 2920 阅读 · 2 评论 -
C++17 线程池类
线程池是一种池化资源技术,也是一种多线程模式。线程池调度线程执行任务,通常序列化任务,形成任务队列。调度的关键在于条件变量。当不满足执行条件时,阻塞线程以让出处理器,在满足条件之前,不占用处理器,以提高资源利用率。线程池提供设置容量方法,由守护线程异步增删工作线程。当任务队列非空时,一次性增加工作线程;当存在闲置工作线程时,逐个删减工作线程。原创 2019-10-23 04:18:46 · 3063 阅读 · 2 评论 -
C++17 双缓冲队列类模板
双缓冲队列分为入口队列与出口队列,在访问两个队列之时,分别采用入口互斥元和出口互斥元。其优势在于仅当取出元素而出口队列为空时,访问两个队列才相互影响,如此可以提高元素出入队列的效率。原创 2019-05-15 13:03:05 · 1816 阅读 · 4 评论 -
C++17 线程类
线程类提供线程重用方案,支持销毁再创建,一次创建反复使用。线程类灵活性高,既作为独立模块,也作为线程池的线程,既可以配置单任务,也可以配置任务队列。线程类支持配置任务队列,可以实现单线程独占任务队列,按照出队列之顺序执行任务;也可以实现多线程共享任务队列,不过需要确保队列接口线程安全。原创 2019-10-14 23:14:53 · 4176 阅读 · 2 评论 -
C++修饰符之数据篇
数据符号修饰符signed、unsigned数据类型修饰符short、long原创 2019-08-05 19:22:57 · 305 阅读 · 0 评论 -
C++遍历方法
下标迭代器STLfor_each基于范围循环forfor eachforeach原创 2019-07-18 20:10:14 · 9715 阅读 · 1 评论 -
C++17 if/switch初始化语句块
对于C++17标准,if和switch语句有以下新形式:if (init; condition)switch (init; condition)初始语句支持定义多个相同类型的变量,条件语句可以是任何条件,不限于以变量值作为判断条件。对于初始语句定义的变量,在if-else及switch-case部分都可见,而在if和switch的外层作用域不可见,如此能够缩小变量作用域。...原创 2019-06-24 13:49:56 · 1542 阅读 · 0 评论 -
预处理元编程
预处理元编程元数据基本语法特殊符号特殊操作符自定义用法参考文献元数据元即不可变,元数据包括整数和字符串两种基本数据。其中,字符串是使用单引号或者双引号包围的字符序列。此外,另一类元数据是标记,预处理元编程主要运算标记,最终将标记展开为指定形式的文本。预处理程序只能识别整数和字符串,但对标记内容没有限制,可以是任意字符序列文本。基本语法# // 空预处理指令,相当于空行引入任何文本...原创 2018-12-16 20:52:00 · 316 阅读 · 0 评论 -
Visual Studio配置EGE图形库
EGE(Easy Graphics Engine)其实是对Windows API的简单封装,适合图形库初学者。由于目前EGE是以C++风格进行封装,因此项目源文件应该使用.cpp文件。Visual Studio配置EGE图形库前期准备下载图形库目录组织结构配置方法创建项目添加源文件构建项目环境配置项目属性测试图形库前期准备下载图形库通过以下任一链接地址下载EGE图形库。EGE图形库主站下...原创 2018-12-26 17:32:53 · 7066 阅读 · 13 评论 -
Visual Studio编译Boost
Visual Studio编译Boost前期准备下载解压配置环境编译步骤引导编译命令参数介绍测试Boost库创建项目导入库测试代码前期准备下载进入Boost官网,点击Boost的最新版本,进入选择下载页面,若使用Windows操作系统,下载Boost源码的7z压缩包。Boost官网:https://www.boost.org解压Boost源码压缩包下载之后,解压至指定位置。我把Boos...原创 2018-12-28 16:54:20 · 2270 阅读 · 0 评论 -
Visual Studio引用MySQL库
Visual Studio配置MySQL库创建项目添加源文件引用外部库方式以绝对路径方式引用MySQL库以相对路径的方式引用MySQL库测试配置创建项目打开Visual Studio,点击菜单栏的文件,出现下拉菜单,依次选择新建–>项目。此时弹出新建项目窗口,在左边依次展开已安装–>模板–>C/C++,于右边,Visual Studio 2017选择空项目,Visual S...原创 2018-12-29 21:06:32 · 2672 阅读 · 0 评论 -
C语言scanf匹配用法
不同系统的换行符制定不同系统之间传递文本文件函数scanf参数列表及返回值输入缓冲区清除剩余字符指定字符串的输入长度输入支持含空格的字符串灵活指定输入长度和格式原创 2018-12-26 12:41:52 · 2764 阅读 · 0 评论 -
Visual Studio 2017安装使用方法
Visual Studio 2017安装步骤前期准备安装过程开发环境启动注册项目创建程序运行安装步骤前期准备首先下载Visual Studio 2017的安装包。如果有微软账号,可以下载Community版本,适用于个人学习和开发。如果对开发环境有更高要求,或者进行团队开发,可以下载Professional版本或者Enterprise版本,此两个版本需要使用密钥注册激活。安装过程由于官网...原创 2020-04-14 10:59:55 · 65594 阅读 · 12 评论 -
Visual Studio 2013安装使用方法
Visual Studio 2013安装步骤装载镜像安装过程开发环境启动注册项目创建程序运行安装步骤装载镜像下载之后的文件是.iso格式的镜像,Windows 8/10都能够双击装载镜像,而Windows 7不能直接装载,可以使用解压软件对.iso文件进行解压。以双击方式装载,会直接进入镜像文件夹。也可以右击镜像,在右键菜单中选择装载,之后调出“文件资源管理器”,找到装载之后的虚拟盘,双击...原创 2020-04-23 14:10:30 · 22650 阅读 · 0 评论 -
Visual Studio 2015安装使用方法
Visual Studio 2015安装步骤装载镜像安装过程开发环境启动注册项目创建程序运行安装步骤装载镜像下载之后的文件是.iso格式的镜像,Windows 8/10都能够双击装载镜像,而Windows 7不能直接装载,可以使用解压软件对.iso文件进行解压。以双击方式装载,会直接进入镜像文件夹。也可以右击镜像,在右键菜单中选择装载,之后调出文件资源管理器,找到装载之后的虚拟盘,双击虚拟...原创 2020-04-13 21:14:22 · 21008 阅读 · 0 评论 -
Microsoft Visual Studio快速运用教程
此教程涵盖Visual Studio 2013, 2015, 2017三个版本的安装步骤、使用方法和调试技巧。Visual Studio快速使用教程简介版本下载地址安装步骤和使用方法调试技巧调试菜单断点设置调试运行单步调试查看窗口停止调试简介Microsoft Visual Studio是一个完整开发工具集,包括整个软件的生命周期所需的大部分工具,如统一建模语言(UML)工具、代码管控工具、...原创 2019-01-08 13:01:49 · 40869 阅读 · 2 评论 -
Visual Studio环境与合并环境属性
在解决方案资源管理器中,右击项目,弹出右键菜单,选择属性,打开项目属性页,在窗口左边依次展开配置属性-->调试,右边有环境和合并环境两个设置。环境$(QTDIR)\bin;$(OutDir)\ffmpeg;$(OutDir)\qt;$PATH合并环境先前不小心设置为否在Visual Studio中,调试执行生成的应用程序,出现以下问题:QDesktopServices::openUrl出错,提示ShellExecute failed (error 2)按Shift键不原创 2019-01-24 21:14:20 · 695 阅读 · 0 评论 -
C++11 once_flag与call_once组合,实现只调用一次函数
std::once_flag实例的状态,指示所关联的函数尚未被调用。其构造函数拥有constexpr指定符,以带有静态存储时间段的实例,作为静态初始化阶段的一部分被构造,避免竞争条件和初始化顺序问题。原创 2019-01-28 20:57:27 · 2717 阅读 · 0 评论 -
C++与lua之互调问题
C++与lua互调的问题lua加载C++动态库出错C++链接lua动态库出错C++与lua互调的多虚拟机错误lua加载C++动态库出错PANIC: unprotected error in call to Lua API (error loading module ‘sqlconnector’ from file ‘./sqlconnector.so’:./sqlconnector.so:...原创 2019-06-11 01:02:18 · 496 阅读 · 0 评论 -
C++输入流出错处理
运用std::cin.ignore方法从输入序列中提取字符并丢弃之int n;while (!(cin >> n)){ cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');}输入流对象std::cin的成员函数ignore用于忽略输入序列剩余字符,直至忽略限定数量的字符,或者遇到分隔字符,出错或者到达序列末尾为止,分隔字符也被忽略。原创 2018-12-17 23:10:22 · 1238 阅读 · 7 评论