- 博客(157)
- 收藏
- 关注
原创 cxxopts位置参数示例
可以方便地处理位置参数(即不带有选项名,按顺序出现的参数)。下面详细介绍其位置参数的用法,包含代码示例、代码解释和注意事项。代码解释创建 对象:此代码创建了一个 对象,用于管理命令行选项,并指定了程序的名称和简要描述。定义普通选项:这里添加了两个普通选项: 用于打印帮助信息, 用于指定输出文件。定义位置参数:首先创建一个 类型的变量 ,用于存储位置参数。然后添加一个名为 的选项,它将接收多个字符串类型的位置参数,并将其存储在 中。设置位置参数名称: 方法指定了位置参数对
2025-02-14 17:16:06
586
原创 cxxopts分组使用示例
支持将命令行选项进行分组,这样可以让帮助信息的展示更加清晰,便于用户理解不同类型选项的用途。以下是关于 分组用法的详细介绍和示例代码。代码解释创建 对象:这行代码创建了一个 对象,用于管理命令行选项,并指定了程序的名称和简要描述。定义选项组:向选项组中添加选项:这里向 中添加了两个选项,分别是输入文件路径和输入文件格式。解析命令行参数:调用 方法对传入的命令行参数进行解析,解析结果存储在 对象中。打印帮助信息:当用户指定了 或 选项时,调用 方法打印帮助信息。 方法的
2025-02-14 17:14:06
729
原创 cxxopts使用示例(C++ 命令行参数解析库)
cxxopts是一个轻量级、易于使用的 C++ 命令行参数解析库,其设计目标是提供简洁、高效的方式来处理命令行输入。轻松地在 C++ 项目中处理命令行参数。下面是一个简单的示例,展示了如何使用。是一个仅头文件的库,你只需要将。通过以上介绍,你可以使用。
2025-02-14 17:09:51
871
原创 独立C++ asio库实现的UDP Client
以下是使用独立的asio库(无需依赖 Boost)实现的 UDP 客户端示例代码。该客户端可以向指定的 UDP 服务器发送消息,并接收服务器的响应。
2025-02-13 14:55:55
599
原创 独立C++ asio库实现的UDP Server
以下是一个使用独立的 C++ Asio 库实现的 UDP 服务器的示例代码。这个 UDP 服务器可以监听指定端口,接收客户端发送的数据,并将接收到的数据原样返回给客户端。
2025-02-13 14:54:01
792
原创 独立C++ asio库介绍
独立的asio库是一个跨平台的 C++ 库,用于网络和底层 I/O 编程。在 C++20 之前,asio通常作为 Boost 库的一部分存在(即 Boost.Asio)。而现在,asio已经可以独立使用,无需依赖 Boost 库,它提供了统一的异步和同步 I/O 模型,让开发者可以方便地编写高性能、可扩展的网络应用程序,支持多种网络协议,如 TCP、UDP、ICMP 等。
2025-02-13 14:49:01
800
原创 SML(State Machine Language)示例2
在使用 SML 创建状态机之前,需要定义事件、状态和动作。使用 SML 的 DSL(领域特定语言)来定义状态机的转换规则。
2025-02-12 15:25:12
345
原创 SML(State Machine Language)示例1
在使用 SML 创建状态机之前,需要定义事件、状态和动作。使用 SML 的 DSL(领域特定语言)来定义状态机的转换规则。
2025-02-12 15:22:19
604
原创 Qt5.15.2 使用C++ filesystem标准库
C++标准发展的很快C++11标准刚普及时,后续C++14/C++17/C++20/C++23相继而来,而Qt5默认使用编译器版本时GCC8.1,对C++17不是全面支持,使用filesystem会有编译错误。通过自定义构建套件的方式将编译版本提高到GCC11.2.0,可以完全支持C++17标准。
2024-07-31 10:04:46
819
原创 Qt添加构建套件
在使用Qt 5.15.2开发中,默认GCC编译器使用的版本是GCC8.1,这个版本对C++17支持不太好,另外不支持C++20。其实可以通过添加构建套件的方式,增加对高版本GCC编译器支持。本文后续将说明如何添加构建套件。
2024-07-31 09:37:08
3705
原创 CL11命令行解析使用实例
CLI11提供了您在强大的命令行解析器中所期望的所有功能,具有美观、简洁的语法,并且以单个文件的形式提供,便于包含在项目中。这很容易适用于小型项目,但功能强大,足以支持复杂的命令行项目,并且可以针对框架进行定制。本来准备使用Boost库中program_options,不过boost整个头文件就有170MB,对于小小项目来说使用成本很高,还得编译boost库,感觉不划算。CLI11功能强大可以直接包含头文件使用,对小项目很友好。本文后面讲述CLL11的使用实例。
2024-07-18 16:02:14
623
原创 Linux下编译boost1.85
Boost提供免费的同行评审的可移植C++源库。我们强调与C++标准库配合良好的库。Boost库旨在广泛使用,并可在广泛的应用程序中使用。Boost许可证鼓励所有用户以最小的限制使用Boost库。我们的目标是建立“现有实践”并提供参考实现,以便Boost库适合最终的标准化。从库技术报告(TR1)中包含的十个Boost库开始,再到自2011年以来ISO C++标准的每次发布,C++标准委员会一直将Boost作为添加标准C++库的宝贵来源。
2024-07-18 13:51:09
769
原创 Xilinx Vitis 2020工程源目录修改
Xilinx Vitis可以做standalone程序开发,不过其工程中使用的路径为绝对路径。工程更换位置后编译将会显示错误。例如:源目录为D:/work,复制到同事电脑上放到C:/work(同事电脑只有一个C盘)。利用Vitis打开工程编译会有一堆错误,提示文件找不到。可以通过手动修改以上文件是可以解决问题,不过手动修改容易出错误。更好的方式是写一脚本来做文件路径替换,这个脚本需要处理xml和json文件。Python语言内置xml和json库,是理想语言选择。
2024-07-09 14:54:45
1579
原创 扫描服务器端口(Python)
如果只知道服务器的地址,不知道其提供服务端口号,可以通过扫描所有端口方式发现服务器提供哪些端口。下面使用Python编写脚本扫描服务器端口。采用单线程扫描1-65535时间比较长,可以缩小搜索范围例如(1-10000)或采样下面多线程方式。服务器有效端口1-65535。
2024-07-09 14:34:29
439
原创 Qt调用Matlab(一)
MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。在本文利用Qt通过C/C++来访问Matlab功能。
2024-07-05 10:55:52
1757
原创 Ubuntu20.04更新GLIBC到2.35版本
Ubuntu20.04默认GLIBC库版本是2.31.今天碰到一个软件需要2.35版本的GLIBC。需要升级到2.35版本。
2024-07-03 17:02:32
6075
5
原创 Modbus RTU协议简介及CRC算法实现
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数Modbus设备通信通过串口EIA-485物理层进行。对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
2024-07-03 16:26:16
3491
3
原创 Linux动态库查询路径设置(LD_LIBRARY_PATH)
Linux下动态库查询路径与Windows不同,即使动态库文件与可执行程序在相同目录下也是找不到的。请注意,修改系统级的动态库路径需要谨慎,因为这会影响到系统中所有使用动态链接器的程序。
2024-07-01 15:11:08
2600
原创 Linux CMakeLists编写之可执行程序
编译工具有很多(make/cmake/BJam)。cmake是跨平台,使用cmake编译需要编写CMakeLists.txt。本文编写CMakeLists.txt来生成C++可执行程序。
2024-07-01 14:45:57
664
原创 Linux CMakeLists编写之静态库
编译工具有很多(make/cmake/BJam)。cmake是跨平台,使用cmake编译需要编写CMakeLists.txt。本文编写CMakeLists.txt来生成C++静态库。
2024-06-27 14:38:37
589
原创 CPPTest设计分析
CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C++中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。CppTest下载地址Github地址下面对其设计进行分析,已更好对其使用。
2024-06-27 09:41:00
1017
原创 为Ubuntu18.04云服务器修改用户shell
在Ubuntu18.04的云服务器,创建一个普通账户,登录进行发现使用shell是sh而不是bash,sh对终端命令支持很不好,将用户的shell修改为bash.
2024-06-26 11:12:54
457
原创 CppTest单元测试框架(更新)
中讲述利用宏ADD_SUITE将测试用例自动增加到测试框架中。但在使用中发现一个问题,就是通过宏ADD_SUITE增加多个测试Suite时,每次运行时都是所有测试Suite都运行,有的Suite运行比较慢,这对边写测试用例边编译运行时效率很低。于是就在原来测试框架下作出修改,即默认运行所有测试用例,不过可以通过命令指定测试用例来运行
2024-06-26 10:29:03
1075
原创 C++并发之环形队列(ring,queue)
最近研究了C++11的并发编程的线程/互斥/锁/条件变量,利用互斥/锁/条件变量实现一个支持多线程并发的环形队列,队列大小通过模板参数传递。环形队列是一个模板类,有两个模块参数,参数1是元素类型,参数2是队列大小,默认是10。入队操作如果队列满阻塞,出队操作如果队列为空则阻塞。
2024-06-25 16:50:26
836
原创 C++并发之阻塞队列(block,queue)
最近研究了C++11的并发编程的线程/互斥/锁/条件变量,利用互斥/锁/条件变量实现一个支持多线程并发的阻塞队列,队列大小没有限制。阻塞队列是一个模板类,有两个模块参数,参数1是元素类型,参数2是容器类型,可以是std::deque和std::list,默认是std::deque。入队操作没有阻塞,出队操作如果队列为空则阻塞。
2024-06-25 16:34:27
846
原创 C++并发之协程实例(四)(通过迭代器访问生成器序列)
协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
2024-06-24 17:09:36
241
翻译 我的C++20协程教程
粗略地说,协程是可以相互调用但不共享堆栈的函数,因此可以在任何时候灵活地暂停执行以进入不同的协程。在C++的真正精神中,C++20协程被实现为一个埋在垃圾堆下面的漂亮的小金块,你必须费力才能访问到漂亮的部分。坦率地说,我对这个设计感到失望,因为最近的其他语言变化都做得更有品味,但遗憾的是,没有协同工作。进一步混淆协程的是,C++标准库实际上并没有提供访问协程所需的垃圾堆,所以你实际上必须滚动自己的垃圾,然后费力地浏览它。无论如何,无论如何,我会尽量把任何进一步的评论留到这篇博客文章的结尾…
2024-06-24 16:23:39
277
原创 C++并发之协程实例(三)(co_await)
协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
2024-06-23 15:07:19
450
原创 C++并发之协程实例(二)(计算斐波那契序列)
协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。斐波那契数列是一位意大利的数学家,他闲着没事去研究兔子繁殖的过程,研究着就发现,可以写成这么一个序列:1,1,2,3,5,8,13,21…也就是每个数等于它前两个数之和。那么给你第 n 个数,问 F (n) 是多少。用数学公式表示很简单: f(n) = f(n-1) + f(n-2)
2024-06-21 12:50:27
430
翻译 C++并发之协程(Coroutines,co_await,co_yield, co_return)
协程(Coroutines )是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
2024-06-20 10:39:58
351
原创 C++并发之协程实例(一)(coroutine, std::coroutine_handle, std::suspend_never, std::suspend_always)
协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
2024-06-18 17:33:23
771
原创 C++并发之原子操作(std::atomic)
原子类型是封装一个值的类型,该值的访问保证不会导致数据争用,并且可以用于同步不同线程之间的内存访问。这个头文件(atomic)声明了两个C++类,atomic和atomic_flag,它们在自包含类中实现原子类型的所有特性。头文件(atomic)还声明了一整套与C中的原子支持兼容的C样式类型和函数。
2024-06-17 16:12:45
1345
原创 undefined reference to `__atomic_is_lock_free‘
看来标准库std::atomic的实现,除部分在头文件实现外,还有部分在库文件中实现。
2024-06-17 15:59:00
393
原创 C++并发之Future(std::future, std::promise, std::packaged_task, std::async)
Future允许异步访问特定提供程序设置的值的功能,这可能在不同的线程中。这些提供程序(providers)中的每一个(要么是promise对象,要么是package_task对象,要么调用async)都与Future对象共享对共享状态的访问:提供程序使共享状态就绪的点与Future对象访问共享状态的点同步。
2024-06-14 18:14:41
1101
原创 C++并发之条件变量(std::condition_variable)
条件变量是一个能够阻塞调用线程直到被通知恢复的对象。当调用其中一个等待函数时,它使用unique_lock(通过互斥锁)来锁定线程。线程保持阻塞状态,直到被另一个调用同一condition_variable对象上的通知函数的线程唤醒。条件变量类型的对象总是使用unique_lock来等待.
2024-06-14 18:10:15
524
Eclipse Layout Kernel(ELK)功能演示
2024-09-12
泰坦尼克号上乘客数据集
2024-07-09
Xilinx Vitis 2020工程源目录修改
2024-07-08
FFMPEG C++封装
2024-07-08
Qt调用Matlab实例
2024-07-03
MODBUS-RTU协议CRC算法
2024-07-03
百度翻译桌面端Windows
2024-06-27
C++11标准库中多线程测试用例
2024-06-18
libssh的C++封装源码及单元测试用例
2024-05-17
在嵌入式开发中,经常会利用命令行交互系统测试功能,本文描述使用C++语言开发的一个命令行交互系统,支持命令注册(C或C++格式)
2024-05-09
Qt实现的Kermit协议源码
2024-03-28
Qt实现的XModem和YModem协议源码
2024-03-28
FFMPEG C++封装库使用示例之初始化
2024-03-27
C++封装例程(class,struct,public,protected,private,friend)
2024-03-25
基于Qt5.12实现TFTP的Server和Client
2024-03-22
Qt显示桌面菜单,包括此电脑/库目录
2024-03-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人