![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 67
码农飞飞
这个作者很懒,什么都没留下…
展开
-
C++异常问题排查调试策略
此文主要讨论的问题是那些偶现的、没有特别征兆的、排查起来比较困难的问题的排查和解决思路。WinDbg是Windows操作系统上的一款强大的调试工具,可用于分析和调试应用程序、内核和驱动程序的崩溃和错误。有些时候程序的异常状态可能不是崩溃,而是资源的异常占用,这时候我们就需要使用一些工具来分析程序的性能瓶颈,然后针对程序的瓶颈进行优化和修复;1.重现bug: 记录问题发生的步骤,记录用户的输入信息,问题发生的软硬件信息,包括操作系统类型、软件版本信息以及各种配套组件的版本等。原创 2024-03-20 18:18:52 · 894 阅读 · 0 评论 -
通过C++程序实现光驱的自动化刻录和读取
数字存储媒体快速发展的今天,光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还有在使用。原创 2023-12-28 19:51:55 · 1616 阅读 · 3 评论 -
easylogging++日志库使用手册
Easylogging++是通过源码文件来集成的跨平台日志库,使用起来非常方便,优点是使用方便,速度快,线程安全,可配置。EasyLogging++日志库只有两个文件,一个头文件一个代码文件拷贝到项目工程中就可以使用。原创 2023-01-14 10:22:09 · 1365 阅读 · 1 评论 -
Poco库使用:使用http协议通信
搭建HTTP服务端,主要用到三个类分别是:HTTPServer、HTTPRequestHandlerFactory、HTTPRequestHandler。HTTPServer负责监听特定的端口接收数据,接收的数据传递给HTTPRequestHandlerFactory,HTTPRequestHandlerFactory通过解析请求的参数在独立的线程中生成HTTPRequestHandler负责对每个独立的请求进行处理原创 2022-09-27 18:39:34 · 2035 阅读 · 0 评论 -
Poco库使用:任务管理器TaskManager
Poco库的任务管理器TaskManager有点像一个功能更加强大的线程池。我们定义的每一个Task以线程的形式运行在TaskManager中。TaskManager负责对运行的每个线程任务进行管理和监控。这里介绍一下任务管理器的用法。原创 2022-09-23 20:49:47 · 1182 阅读 · 2 评论 -
Poco库使用:事件通知
Poco为模块之间的通信提供了一套事件通知机制,可以实现模块间和线程间的通信。有点类似于QT中的信号和槽机制。通过该机制我们可以在不同的模块单元之间传递自定义数据。通知框架支持两种策略:NotificationCenter(通知中心)和NotificationQueue(通知队列) 。其中通知队列又包含优先级通知队列和带时间戳的通知队列。原创 2022-09-20 13:06:32 · 1242 阅读 · 0 评论 -
Poco库使用:操作Json格式数据
Json是一种轻量级数据交换格式,在网络通信过程中使用非常广泛。这里介绍一下如何通过Poco库操作Json数据信息。原创 2022-09-12 14:42:52 · 1553 阅读 · 0 评论 -
Poco库使用:挂载解析动态库
为了提升程序的复用性,很多时候我们需要通过动态库模块来扩展程序。这里就介绍一下如何通过Poco库动态的挂载和解析动态库文件。原创 2022-09-12 14:18:58 · 385 阅读 · 0 评论 -
Poco库使用:文件目录操作
在工程项目开发中,文件目录操作应该是最常见的操作之一了吧。这里就介绍一下如何通过Poco库实现各种文件目录操作。原创 2022-09-08 18:51:21 · 1631 阅读 · 0 评论 -
Poco库使用:文件压缩和解压缩
Poco库提供了压缩zip包和解压缩zip包的模块,通过该模块我们可以很方便的操作zip文件。在使用zip文件的压缩和解压缩功能的时候,我们需要先引入对应的模块库PocoZip。引入之后我们就可以自由的使用zip功能了,这里介绍一下zip模块的常规方法。原创 2022-09-01 20:07:26 · 917 阅读 · 0 评论 -
Poco库使用:日志模块
在使用Poco库开发应用的时候,需要使用日志模块记录程序运行的一些信息。这里介绍一下日志模块的常见用法。原创 2022-08-30 20:38:00 · 1443 阅读 · 0 评论 -
Poco库使用:单元测试
Poco库中提供了一套小巧的单元测试框架,可以用来对C++代码进行测试。这里介绍一下Poco库中的单元测试框架的使用方法,首先在工程中引入单元测试模块CppUnit,同时包含对应的库的头文件目录。添加完成之后,我们在工程中添加主测试集,测试集是测试程序的入口类,对应的实现如下:...原创 2022-08-27 17:13:01 · 772 阅读 · 0 评论 -
Poco库使用:操作SQLite数据库
Sqlite是在工程项目中使用比较多的小型数据库。由于其非常小巧且占用资源低,深受开发者喜欢。这里就介绍一下如何通过Poco框架操作SQLite数据库。这里假设你已经完整编译了Poco库,如果还没有编译好,可以下载我已经编译好的Poco库。下载地址:...原创 2022-08-25 20:42:55 · 1562 阅读 · 1 评论 -
Linux-Windows获取系统当前应用的窗口状态
很多时候为了提升产品的用户友好性,我们需要针对系统其它第三方应用的窗口状态进行处理,比如当其他应用全屏显示的时候,隐藏当前应用的窗口显示。为了实现这种功能,我们需要定时检查当前激活窗口的窗口状态,判断其是不是全屏显示。这里介绍一下该功能在Windows和Linux下的实现策略。...原创 2022-07-23 11:10:19 · 1856 阅读 · 2 评论 -
QT自定义控件的悬浮样式实现
很多时候为了提升UI的交互友好性,我们需要增加控件的悬浮样式,但是通过下面的QSS样式配置悬浮样式的时候,会出现悬浮样式不生效的问题。CustomWidget:hover{ border:2px solid #017BC9; background-color:#FFFFFF;}这是因为在QWidget的绘制事件中默认没有对悬浮样式进行绘制的原因,所以我们只需要在paintEvent()中添加对应的绘制代码就可以了。void CustomWidget::paintEvent(QPain原创 2022-04-07 21:59:04 · 3930 阅读 · 0 评论 -
计算机是如何运行起来的
计算机作为程序运行的主要载体,了解其运行机理和组成原理对于优化程序是很有帮助的,这里详细介绍一下计算机是如何运转起来的。在计算机加电启动之后,中央处理器(CPU)会从一个固定地址加载指令序列执行。通常这个地址是固化在主板上的BISO程序。BIOS程序包含的内容包括:1.存储设备的的驱动程序,用以识别常用的存储设备,如软盘、硬盘、光驱等2.基础设备的驱动程序如键盘、鼠标、显示器3.对设备启动和配置的管理能力4.在外置存储上执行程序的能力5.将执行权限转移动外置存储,跳转到外置存储的原创 2022-04-01 19:25:06 · 2395 阅读 · 0 评论 -
windows/Linux创建桌面快捷方式
很多时候为了方便应用程序的快捷使用,我们会创建桌面快捷方式用来便捷调用。如果应用程序没有加密调用参数的话,我们直接创建一个文件快捷方式的链接就可以了。但是如果应用程序添加了加密调用参数,在动态创建桌面快捷方式的时候就比较麻烦了。这里介绍一下通过windowsAPI动态创建桌面快捷方式的方法。希望对你有帮助。Windows创建桌面快捷方式通过WindowsAPI创建带参数的桌面快捷方式/**@brief 通过windowsAPI创建桌面快捷方式* @param[in] target_exe_原创 2022-03-29 13:12:49 · 614 阅读 · 0 评论 -
Windows/Linux模拟键盘鼠标操作
在开发一些类似于向日葵或者VNC的远程桌面或者远控软件的时候,我们往往需要模拟键盘操作模拟鼠标操作。通过模拟操作,我们可以在不安装硬件外设的时候实现对电脑的控制。这里介绍一下在Windows和Linux平台下模拟鼠标键盘的实现方式,希望对有相关开发需求的人有帮助。Windows模拟鼠标键盘操作在windows下我们可以通过调用对应的windowsAPI实现对应的键盘鼠标操作模拟模拟键盘操作组合键的发送方式#include <Windows.h>//模拟键盘发送Ctrl+V原创 2022-03-27 09:44:45 · 6663 阅读 · 1 评论 -
让Qt窗口保持显示在最前的跨平台解决方案
很多时候,为了方便软件的使用,我们需要让编写的界面程序显示在最上层,这时候就需要对窗口属性进行调整。网上给的常用方案是给窗口设置显示在最前的属性://Qt::FramelessWindowHint表示窗口是无边框的窗口,不显示标题栏//Qt::Tool表示是工具窗口不在任务栏显示程序图标//Qt::WindowsStayOnTopHint表示窗口显示在最上层//Qt::WindowDoesNotAcceptFocus表示窗口不接受焦点setWindowFlags(Qt::FramelessWi原创 2022-03-27 09:22:25 · 6512 阅读 · 0 评论 -
快速搭建一款输入法(前端UI搭建)
前端UI显示是仿照手机输入法进行设计的,支持触摸屏点击输入,也支持实体键盘输入。前端UI将将输入模式分为:英文输入、中文输入、符号输入、数字输入、手写输入五种。英文输入模式下用户可以输入英文符号,通过Shift键来切换对应的大小写字符。显示效果如下:点击右下角的中英文切换按钮可以实现中英文输入模式的切换。中文输入模式下用户可以通过拼音输入获取各种候选,从而实现各种中文字符的输入。中文输入模式效果如下:中文输入模式下第一行显示用户输入的拼音串,第二行显示候选,我们可以通过滑动候选...原创 2022-03-21 12:44:54 · 1305 阅读 · 2 评论 -
Windows/Linux平台下命名管道通信调用参考
在一些需要传递少量数据的进程通信业务中,采用命名管道通信是一种不错的选择,但是管道通信本身是不跨平台的。如果我们想在不同的平台下使用管道通信就会很麻烦。这里我简单的总结了一下命名管道在windows平台和Linux平台下的使用方法,希望对各位有所帮助。实现的比较简陋,大家可以根据自己的具体业务进行优化封装。Windows平台管道通信实现1.服务端创建管道命名管道通信的服务端需要开辟一个线程,在线程里服务端创建命名管道,然后连接命名管道。通过管道服务端可以接收客户端发送过来的消息,也可以向客户端发原创 2022-03-19 19:31:26 · 608 阅读 · 0 评论 -
fcitx架构介绍和模块说明
fcitx的架构比较简单,输入法的宿主进程称为输入法的客户端,输入法框架从客户端接受按键消息,然后对按键消息进行处理最后向客户端输出一个处理后的字符串。fcitx处理键盘事件分为四个阶段:PreInput,DoInput,PostInput和处理热键。我们的输入法在DoInput这个阶段被调用。fcitx的插件被分为四个类别:Frontend,input Method,Module,和User Interface,Frontend负责从客户端程序接收按键消息,然后将消息转发给fcitx框架,Inpu原创 2022-02-26 15:36:16 · 3939 阅读 · 0 评论 -
fcitx框架接口使用说明
Fcitx (Flexible Input Method Framework) ──即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台,可以通过安装引擎支持多种输入法,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。由于fcitx的开发者比较小众,相应的说明文档比较少,这里对fctix里面常用的接口进行了分类说明,希望有帮助。输入法管理fcitx输入法状态管理的各种接口//注册输入法//在输入法的插件里面通过该接口向输入法框架里面注册输入法void FcitxInst原创 2022-02-20 09:18:57 · 904 阅读 · 0 评论 -
dbus总线通信的原理和使用
1.什么是D-BusD-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,D-Bus已被大多数Linux发行版所采用,开发者可使用D-Bus实现各种复杂的进程间通信任务。2.D-Bus的相关概念D-Bu原创 2022-02-14 21:08:54 · 7612 阅读 · 0 评论 -
提高代码质量的那些建议
程序员跟各行各业的手艺人一样,都是靠自己的作品吃饭。所以要想获得高收入和业界的认可就要不断的学习提高自己的业务水平。这里我总结了一些程序员提升代码质量的建议希望能对你的进阶有帮助。1.提高代码的复用程度不管是写新代码还是对旧代码的重构,我们一定要注意提高代码的复用性。很多小白写代码的时候只在意业务功能的实现,往往代码就写成了一坨。下次再有类似的需求的时候还得重写,以往的代码一点也用不上,这就导致了大量的重复工作。所以我们在写代码的时候一定要注重代码的复用性,对代码进行有效的分割,实现高内聚低耦合。这原创 2022-02-13 18:08:41 · 1904 阅读 · 0 评论 -
盘点一下2021年项目中的那些经验教训
2021在项目中遇到过很多坑,走了很多弯路,这里盘点一下,算是经验教训吧。希望在新的一年里有更多的成长和收获。也希望各位能够通过我的经历,学习到一些东西,争取在未来的开发道路上少走弯路。1.任何一个功能模块都要有运行日志之前的Demo项目开发的多了,养成了不写日志的坏习惯,结果开发一个线上项目没有写日志,这家伙,出问题排查的时候差点没有把自己恶心死和现场运维的沟通的时候也很费劲。所以说开发的时候一定要写日志!!!日志就像警察破案的线索,没有线索警察怎么破案呢?我建议日志在允许的范围内一定要尽可能的写原创 2022-02-06 12:40:23 · 425 阅读 · 0 评论 -
C++标准线程库的基本使用
Qt的封装程度比较高的线程类用多了,发现C++标准库里面的线程库有些生疏。这里总结一下C++标准库里面的线程相关内容,供大家参考使用。其实标准C++的线程库也是挺好用的。1.创建线程异步执行我们可以通过async函数直接异步创建一个线程,这种方法相对来说比较简单,线程执行的结果可以直接用future<T>来进行获取。#include <iostream>#include <future>//线程对应的函数bool thread_func(int原创 2022-02-06 10:05:23 · 831 阅读 · 0 评论 -
秒杀系统的两种设计方案
秒杀系统面临的挑战秒杀活动和类似的抢购活动中,用户会在短时间内集中操作。后台系统可能在一瞬间面临平时几十倍甚至上百倍的并发请求。如果后台系统没有没有足够的冗余资源的话,系统可能被一瞬间搞瘫痪。如何应对短时间内的请求洪峰,让系统正常工作,是一个秒杀系统需要应对的严峻挑战。由于秒杀任务面临的请求是瞬时的,扩充机器数量是不合理的也不划算。如何在现有硬件条件下,应对秒杀活动的海量请求需要从业务流程方面进行优化。下面介绍两种秒杀系统解决问题的设计思路。1.分布式CDN边缘节点促销活动中客户端会不停的请原创 2021-12-21 15:06:26 · 2764 阅读 · 0 评论 -
编码转换参考范例大全
在编程的时候各种各样的编码转换让人挠头。有的地方需要宽字符有的地方需要窄字符,需要转换。有的地方需要UTF-8编码,有的地方需要UTF-16编码,需要转换。各种各样的编码转换让人头疼,这里呢,就梳理一下各种各种的编码转换方法。让你不再为这个问题头疼。需要注意的是有些方法引用了windows的API无法实现跨平台。获取文件的编码类型//获取文件的编码//找不到文件头的信息的时候可能是ASCII,也可能是UTF8不带bom头的编码需要自己指定一下enum CODETYPE { ASCII, U原创 2021-11-13 17:23:55 · 1026 阅读 · 0 评论 -
呕心沥血梳理C++新标准超好用的新特性(实战必备)
C++标准更新迭代非常快,我们熟悉的标准有C++98,C++11,C++14,其实最新的标准已经到C++20了但是支持该标准的IDE还很少。其实对于很多人来说,能掌握到C++14已经非常不错了。但是事实上是很多人对C++的掌握还停留在C++98上,连11的很多新特性都没有用到。C++新标准引入的新特性能提高编程的效率和代码的鲁棒性,学习一下对程序员的编程实战大有裨益,这里我结合一下自己的学习笔记和理解,总结了一下,希望对大家有所帮助。这里提一句,之前在极客时间上学习了罗剑锋老师的C++实战笔记,感觉非常原创 2021-10-16 16:31:46 · 1693 阅读 · 0 评论 -
24种设计模式的C++实现(万字长文,欢迎收藏)
原文链接目录为什么使用设计模式性能提升单例模式享元模式对象创建模式组简单工厂模式抽象工厂模式建造者模式接口隔离模式组facade(外观)模式代理者模式适配器模式中介者模式组件协作模式策略模式观察者模式单一职责模式组装饰器模式桥接模式行动变化模式组命令模式访问者模式状态变化模式组状态模式备忘录模式解释器模式数据结构模式组迭代器模式组合模式责任链模式为什么使用设计模式抵御变化复原创 2021-07-31 11:19:50 · 2772 阅读 · 0 评论 -
通过优化存储局部性提升程序性能
原文链接计算机的存储系统是一个具有不同容量成本和访问时间的存储设备的层级结构。层次结构图如下图所示:层次结构上从上至下,访问速度逐渐降低,容量逐渐增大,单位存储的成本逐渐降低。从上至下依次是寄存器、L1 L2 L3高速缓存、主存、本地存储、远端存储。寄存器被集成在CPU里面访问速度最快,容量最小。L1 L2 L3是CPU的高速缓存,访问速度和容量L1 > L2 > L3 ,其实L1 L2 L3 高速缓存,也是一套缓存系统,L2 是L1的缓存,L3是L2的缓存,引入缓存系统也是为了降低原创 2021-07-07 19:43:03 · 275 阅读 · 0 评论 -
Poco库完全使用手册
什么是POCO库?POCO库是强大的的跨平台C++库,可以用来编写多平台的网络应用程序,这些平台包括桌面端、服务端、移动端、IOT(物联网)、嵌入式系统等。总的来说是一个非常强大的综合性库。为什么使用Poco库?1.支持跨平台2.性能表现优异3.API使用方便,便于上手4.库可以拆分使用,容易实现轻量化调用5.功能模块丰富6.Poco C++库是在Boost软件许可证下授权的,既可以用来开发非商业应用,也可以用来开发商业应用。可以说是可以自由使用的了。POCO库都能做哪些原创 2021-06-29 22:37:17 · 17577 阅读 · 4 评论 -
C++编码风格指南(如何写出易读的代码)
编程跟说话一样,要想言简意赅逻辑清晰,就要学会掌握一定的规则和方法。只有掌握了对应的规则,才能写出优美的程序。这里通过代码留白、代码注释、标识符命名三个方面介绍,如何写出清晰明了的代码。代码留白林锐博士,在林锐·高质量C 编程指南之中特别指出了,通过代码留白写出结构松散的代码可以提高代码的易读性。代码留白指恰当的运用空行分隔代码块,用空格分隔开变量和操作符,保持阅读的节奏。下面介绍一下代码留白的策略,方便大家的使用,避免生搬硬套。1.在每个类声明之后、每个函数定义结束之后都要加空行2原创 2021-06-27 21:35:46 · 365 阅读 · 0 评论 -
C语言标准库函数大全
原文链接C语言作为影响力最为深远的语言之一,应用范围非常广泛。在一些对性能要求比较高的领域,C语言依然有不可撼动的地位。但是C语言标准库的函数比较多,很多时候我们要实现某个逻辑功能,不知道调用哪些函数。这时就不得不去查询对应的函数文档,这样比较费时。这里把大家能用到的几乎的所有的C语言库函数以表格的形式列出来,供大家参考。根据功能将C语言标准库函数分为:数学运算、文件和目录操作、事件和日期、进程操作、内存分配、字符串处理、系统函数、类型转换、绘图函数九类。下面以表格的形式分别介绍。数学运算主原创 2021-06-27 09:44:51 · 14722 阅读 · 4 评论 -
编程范式总结
1.什么是编程范式,编程范式都有哪些?编程范式是一种方法论,用来指导你编写代码过程中的思路、规则、习惯和定式。是编码过程中一种纲领,起着引领的作用。编程范式和编程语言不同,有的范式只有少部分语言支持,有的范式很多语言都支持。有的语言只支持一种编程范式,有的语言支持多种范式。比如C++支持函数式编程,也支持面向对象编程、泛型编程。常用的编程范式有:1.函数式编程2.面向过程编程3.面向对象编程4.泛型编程2.编程范式的优缺点及支持的语言?函数式编程是通过数学函数表达式的方式来避免状态和可.原创 2021-06-19 22:58:35 · 830 阅读 · 3 评论 -
常用的C++11特性快速上手
随着时间的发展,C++经历了C++98、C++11、C++14、C++17、C++20等多个标准,特性也越来越多,眼花缭乱的标准和特性让人目不暇接。其实很多最新的标准编译器都还没有支持,只是存在于理论阶段。现在应用的最为广泛的还是C++11标准,这里总结一些C++11中常用的特性,帮助初学者快速入手学习C++11特性。C++11增加了很多库编写的特性和模板特性,这些特性是针对库开发者和系统开发者的,对普通Coder用处不大。这里主要介绍所有人都能用到的通用特性。主要分为以下几点:1.final/ove原创 2021-06-19 11:26:01 · 287 阅读 · 0 评论