- 博客(110)
- 收藏
- 关注
原创 C#从入门到精通(4)
快速存储和查询数据的软件。常用的数据库有MysQL、SQL Server、ORACLE、DB2等。本文使用的数据库是SQL Server。
2025-03-30 14:59:16
796
原创 C#从入门到精通(2)
语法:if(表达式1) { 语句1 } else if (表达式2) { 语句2 } else {语句3};声明:例如:int[ ][ ] arr = new int[2][ ];表达式为真,执行语句1,表达式为假,执行语句2。根据表达式匹配对应的常量表达式,执行对应的语句,没有就执行default中的语句。例如: int[ ][ ] arr = new int[2][ ];基本思想是每次从未排序的部分中选择最小(或最大)的元素,放到已排序部分的末尾,直到所有元素排序完成。但由于存储的是键值对。
2025-03-23 20:19:27
804
原创 TinyWebServer项目笔记——09 日志系统(下)
日志文件局部变量的懒汉模式获取实例生成日志文件,并判断同步和异步写入方式同步判断是否分文件直接格式化输出内容,将信息写入日志文件异步判断是否分文件格式化输出内容,将内容写入阻塞队列,创建一个写线程,从阻塞队列取出内容写入日志文件通过局部变量的懒汉单例模式创建日志实例,对其进行初始化生成日志文件后,格式化输出内容,并根据不同的写入方式,完成对应逻辑,写入日志文件。日志类包括但不限于如下方法,公有的实例获取方法初始化日志文件方法异步日志写入方法,内部调用私有异步方法内容格式化方法。
2025-03-17 22:18:51
891
原创 SpaceClaim二次开发(7)
如果需要对格式进行更多控制,可以使用Window.Units.Length.ConversionFactor和Window.Units.Length.Symbol表示长度,或使用Window.Units.Angle.ConversionFactor和Window.Units.Angle.Symbol表示角度。
2025-03-16 22:27:13
1198
原创 TinyWebServer项目笔记——09 日志系统(上)
本项目使用单例模式创建日志系统,对服务器运行状态、错误信息和访问数据进行记录,该系统可以实现按天分类,超行分类功能,可以根据实际情况分别使用同步和异步写入两种方式。其中异步写入方式,将生产者-消费者模型封装为阻塞队列,创建一个写线程,工作线程将要写的内容push进队列,写线程从队列中取出内容,写入日志文件。日志系统大致可以分成两部分,其一是单例模式与阻塞队列的定义,其二是日志类的定义与使用。
2025-03-16 21:12:34
569
原创 SpaceClaim二次开发(4)
文档有两种类型的属性:核心属性包括描述、主题、标题和创建者等标准字段。核心属性集是固定的。不能创建新的核心属性。自定义属性允许第三方应用程序将数据与文档一起存储。每个自定义属性都是一个名称-值对。请注意,一个文档可以包含多个部件,因此如果要存储部件的数据,最好通过在部件母版上存储自定义属性来完成(请参见下一主题)。Doc对象master提供自定义属性,以便第三方应用程序可以存储数据。提供了两种类型的属性:文本属性和数字属性。属性是一个名称-值对。
2025-03-14 22:02:15
614
原创 TinyWebServer项目笔记 ——11 数据库连接池
池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化。通俗来说,池是资源的容器,本质上是对资源的复用。顾名思义,连接池中的资源为一组数据库连接,由程序动态地对池中的连接进行使用,释放。当系统开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中获取,无需动态分配;当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。池可以看做资源的容器,所以多种实现方法,比如数组、链表、队列等。这里,使用单例模式和链表创建数据库连接池,实现对数据库连接资源的复用。
2025-03-14 07:00:00
1339
原创 C++之指针作为函数参数
指针作为函数参数时,指向的地址在函数内外是相同的。指针本身的地址在函数内外是不同的,因为指针是按值传递的。如果需要修改指针本身(例如让它指向另一个地址),可以使用指针的引用或指针的指针。
2025-03-13 20:22:07
347
原创 SpaceClaim二次开发(3)
本章介绍SpaceClaim二次开发文档的第四章,(由于使用的翻译,一些专业名词可能翻译不准确,如有错误,相互交流学习)
2025-03-13 19:54:51
960
原创 SpaceClaim二次开发(2)
文档是加载和保存的单位。假设已保存,则文档对应于磁盘上的SpaceClaim scdoc文件。DocObject是属于文档的对象。文档对象不是保存文档时唯一保存的对象,但它们是唯一具有document属性的对象。文档对象的示例包括:零件、组件、设计体、设计面、基准面和注释。文档对象提供:父子树包含层次结构。用于持续识别的监视器。更新状态以指示文档对象已更改。用于存储第三方数据的自定义属性。
2025-03-12 21:34:14
966
原创 SpaceClaim二次开发(1)
本文档旨在概述SpaceClaim API及其基本概念。另一个有用的资源是“SpaceClaim_API.chm”帮助文件(这是下载SpaceClaim自带的文件),其中包含以下部分:(1)入门。解释了如何编写外接程序,并添加到SpaceClaim。(2)示例。它提供了用C#、F#、C++/CLI和Visual Basic. NET编写的加载项命令示例的下载链接。这些示例展示了如何使用API执行特定任务,例如遍历装配体结构、查询实体的拓扑和几何形状或创建注释。(3)API 类库。
2025-03-12 15:21:56
741
原创 TinyWebServer项目笔记 ——03 http连接处理(上)
在服务器项目中,http请求的处理和响应至关重要,关系到用户界面的跳转和反馈。基础知识方面包括epoll、HTTP报文格式、状态码和有限状态机。代码分析方面,对服务器端处理http请求的全部流程进行简要介绍,然后结合代码对http类及请求接收进行详细分析。
2025-03-10 15:27:38
1135
原创 TinyWebServer项目笔记——02 半同步半反应堆线程池
3 public:4 //thread_number是线程池中线程的数量5 //max_requests是请求队列中最多允许的、等待处理的请求的数量6 //connPool是数据库连接池指针910 //像请求队列中插入任务请求1214 //工作线程运行的函数15 //它不断从工作队列中取出任务并执行之171921 //线程池中的线程数2324 //请求队列中允许的最大请求数2627 //描述线程池的数组,其大小为m_thread_number29。
2025-03-09 22:14:28
1008
原创 C++数据结构之树
在C++中,树(Tree)是一种常见的数据结构,用于表示层次关系和分层数据。树由节点(Node)组成,每个节点包含数据和指向其子节点的指针。树的基本概念包括:1.根节点(Root):树的顶层节点,没有父节点。2.子节点(Child):一个节点的直接下级节点。3.父节点(Parent):一个节点的直接上级节点。4.叶节点(Leaf):没有子节点的节点。5.深度(Depth):从根节点到当前节点的路径长度。6.高度(Height):从当前节点到最远叶节点的路径长度。
2025-03-09 07:00:00
1022
原创 TinyWebServer项目笔记——01 线程同步机制封装类
RALL的核心思想是将资源的获取与对象的初始化绑定在一起,资源的释放与对象的析构绑定在一起。由于C++的机制,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。1.生产者-消费者模型:当缓冲区为空时,消费者线程等待,当缓冲区有数据时,生产者线程通知消费者线程。互斥量的核心思想是:当一个线程持有互斥量时,其他线程必须等待,直到该线程释放互斥量后才能继续访问共享资源。3.阻塞机制:如果互斥量被其他线程持有,尝试加锁的线程会被阻塞,直到互斥量被释放。用于控制对多个资源的访问。
2025-03-08 17:28:51
745
原创 C++时间处理(总结)
C++中,处理时间的相关功能主要依赖于C标准库(如<ctime>)和C++11引入的<chrono>库。下面将详细介绍起相关用法。C 标准库<ctime>: 适合简单的日期和时间操作。C++11<chrono>: 提供了更现代、更灵活的时间处理功能,适合高精度计时和时间点操作。C++20<chrono>: 扩展了日历和时区支持,适合复杂的日期和时间操作。如有错误,敬请指正!!!
2025-03-06 15:57:36
988
原创 C++设计模式之单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。其核心思想是将类的实例化过程进行严格控制,使得在整个程序运行期间,该类只能创建一个对象实例。这样做的好处是可以避免多个实例带来的资源浪费和数据不一致问题,同时方便对这个唯一实例进行全局访问。它常用于需要全局唯一对象的场景,如配置管理、日志记录、数据库连接池等。推荐使用 Meyer's Singleton(静态局部变量),简洁且线程安全。如果需要动态内存管理,可以使用智能指针单例模式。
2025-03-05 20:06:38
885
原创 C++网络编程之Socket
在C++网络编程中,Socket是实现网络通信的核心工具,C++本身并没有直接提供socket接口,而是通过操作系统提供的来实现网络通信。下面将详细介绍一下如何用C++进行socket编程。Socket 是网络编程的核心工具,掌握其基本概念和工作流程对于开发网络应用至关重要。如有错误,敬请指正!!!
2025-03-04 21:33:07
835
原创 C++数据结构之链表
链表是C++中常用的一种动态数据结构,它有一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表与数组不同,它的内存分配是动态的,不需要连续的内存空间。链表是一种灵活的数据结构,适合动态数据存储和频繁插入/删除的操作。单向链表简单易于实现,双向链表支持双向遍历。链表的缺点是访问元素效率较低,需要额外的内存存储指针。通过链表,可以更好地理解指针和动态内存管理的概念。如有错误,敬请指正!!!
2025-03-03 07:00:00
358
原创 C++数据结构之数组(详解)
在C++中,数组是一种基本的数据结构,用于存储相同类型的元素的集合。数组的元素在内存中是连续存储的,可以通过索引访问。下面将详细介绍C++数组的相关内容。数组的定义需要指定元素的类型和数组的大小。type:数组元素的类型(如 int、char)等。arrayName:数组的名称。arraySize:数组的大小(必须是常量表达式)。int arr[5];// 定义一个包含 5 个整数的数组数组作为C++中最基本的数据结构之一,适合存储固定大小的元素集合。
2025-03-02 19:01:46
535
原创 C++入门项目之数独
很多人在学习完C++后,感觉没有项目可以练习,今天给大家带来一个C++的入门项目——数独游戏(原项目来自于github,但我做了部分修改和注释,更适合新手学习)。项目特点:可以自行设置语言、难度和操作模式。通过移动在空白处填上合适的数字(没事的时候可以自娱自乐)。项目难度:入门级别(总共600多行代码)。适合人群:有一定C++基础的。项目难点:数据的存储与操作。(做了较详细的注释)。
2025-03-02 11:44:58
391
原创 C++关键字之new
在C++中,new是一个用于动态内存分配的关键字。它允许程序在运行时从堆(heap)中分配内存,并返回指向该内存的指针。new是 C++ 中管理动态内存的主要方式之一,与 C 语言中的malloc类似,但new更安全和强大,因为它会自动调用构造函数并支持异常处理。new用于动态分配内存,并返回指向该内存的指针。new会自动调用构造函数,delete会自动调用析构函数。分配数组时使用 new[],释放时使用delete[]。推荐使用智能指针或标准库容器替代手动管理内存。
2025-03-01 14:48:15
850
原创 C++之 “&” 用法(总结)
在类中,可以使用&定义引用类型的成员变量。MyClass(int& value) : ref(value) {} // 初始化引用成员int x = 10;// 修改 x 的值// 输出 20return 0;引用成员必须在构造函数中初始化,且不能重新绑定。
2025-03-01 11:22:14
512
原创 C++algorithm之remove函数
在C++中,remove是标准库<algorithm>头文件中的一个算法函数,用于将满足特定条件的元素移动到容器的末尾,但并不真正的删除它们。它通常与容器的erase方法结合使用,以实现真正的删除操作。remove 和 remove_if 用于将满足条件的元素移动到容器末尾。必须结合erase才能真正删除元素。它们是处理顺序容器中元素移除的常用工具。如有错误,敬请指正!!!
2025-02-28 11:12:43
511
原创 C++ algorithm之shuffle函数
在C++中,shuffle是标准库<algorithm>头文件的一个算法函数,对容器中的元素进行随机重排。它使用随机数生成器来打乱元素的顺序。shuffle 是 C++ 中用于随机重排容器元素的函数。它需要指定一个随机数生成器(如mt19937)。推荐使用 shuffle 而不是已弃用的 random_shuffle。如有错误,敬请指正!!!
2025-02-27 23:09:33
336
原创 C++异常处理机制之try-catch
try-catch是C++中用于异常处理的机制。通过try-catch,程序可以捕获并处理运行时发生的异常,从而避免程序崩溃,并提供更友好的错误处理方式。try-catch是C++ 中处理异常的核心机制,能够有效提高程序的健壮性。通过合理使用 try-catch,可以捕获和处理运行时错误,避免程序崩溃,并提供清晰的错误信息。如有错误,敬请指正!!!
2025-02-26 11:08:57
670
原创 C++调试之assert
assert是C++标准库中的一个宏,用于在程序中进行调试时检查某个条件是否为真。如果条件为假(false),assert会终止程序并输出错误信息,通常包括文件名、行号和失败的表达式。assert是一个非常有用的调试工具,可以帮助开发者在开发过程中快速发现和定位问题。但在生产代码中,应该使用更健壮的错误处理机制。如有错误,敬请指正!!!
2025-02-26 07:00:00
457
原创 C++的三种对象模型
在C++中,对象模型是指C++编译器如何实现对象的布局、内存分配、成员函数调用等机制。C++的对象模型主要有三种,分别是:简单对象模型、表格驱动对象模型、C++对象模型。
2025-02-25 19:29:22
390
原创 C++11新特性之move
在C++中,move是一个用于将对象转换为右值引用的函数模板,定义在<utility>头文件中。它的主要作用是启用移动语义,允许资源的所有权从一个对象转移到另一个对象,而不是进行深拷贝。move是C++11引入的一个重要工具,用于实现移动语义、优化资源管理。通过将对象转为右值引用,使得资源的所有权可以高效转移,从而减少不必要的拷贝操作。如有错误,敬请指正!!!
2025-02-25 07:00:00
385
原创 C++对象模型之C++额外成本
C++与C最大的区别,无疑在于面向对象,面向对象编程给C++带来了强大的特性和灵活性。但同时也带来了一定的运行时和编译时的开销。下面介绍C++对象模型的额外成本及其来源。C++对象模型的额外成本主要来自以上七部分。这些特性使C++更加灵活的同时也增加了额外的成本。因此要合理使用C++的特性。如有错误,敬请指正!!!
2025-02-24 22:01:58
771
原创 C++之static_cast
在C++中,static_cast是一种显式类型转换运算符,用于在编译时进行类型转换。它是C++中最常用的类型转换方式之一。static_cast是C++最常用的类型转换运算符,适合于大多数显式类型转换场景。它提供了编译时检测,比强制类型转换更安全。对于指针类型,注意向下转换的安全性。如有错误,敬请指正!!!
2025-02-24 07:00:00
849
原创 C++11新特性之enum class
enum class是C++11引入的有作用域的枚举类型。与传统的enum不同,enum class的枚举值不会隐式转化为整数,也不会污染全局命名空间。必须通过作用域解析运算符(::)来访问枚举值。enum class是C++11引入的一种强类型、有作用域的枚举类型。它的设计更加安全和清晰,更符合现代C++编程。如有错误,敬请指正!!!
2025-02-23 15:41:42
415
原创 C++关键字之mutable
在C++中,mutable是一个关键字,用于修饰类的成员变量。它的主要作用是允许在常量成员函数或常量对象中修改被标记为mutable的成员变量。通常情况下,常量成员函数不能修改类的成员变量,但有些情况下,某些成员变量的修改并不影响对象的逻辑状态(例如缓存、计数器等)。这时可以使用 mutable来允许这些变量在常量成员函数中被修改。
2025-02-23 11:18:11
382
原创 C++常量成员函数定义与使用
在C++中,函数定义后加const修饰符表示该成员函数是一个常量成员函数。这种函数承诺不会修改调用它的对象的状态。具体来说,常量成员函数不能修改类的任何非静态成员变量,也不能调用任何非常量成员函数。
2025-02-23 11:01:37
387
原创 C++STL容器之unordered_map
unordered_map是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs)。它基于哈希表实现,提供了平均时间复杂度为 O(1) 的查找、插入和删除操作。与map不同,unordered_map不会对键进行排序,因此它不保证元素的顺序。unordered_map是一个高效的关联容器,适用于需要快速查找、插入和删除键值对的场景。由于它不保证元素的顺序,因此在需要有序存储的情况下,map可能是更好的选择。如有错误,敬请指正!!!
2025-02-22 16:52:06
526
原创 C++STL容器之set
set容器是C++标准模板库(STL)中的一个关联容器,用于存储唯一的元素。set中的元素是自动排序的,不允许重复。set通常基于红黑树(一种自平衡二叉查找树)实现,因此插入、删除和查找操作的时间复杂度都为O(log n)。set 是一个非常有用的容器,适用于需要存储唯一元素并且需要快速查找、插入和删除操作的场景。由于它是有序的,因此在需要按顺序处理元素时也非常方便。如有错误,敬请指正!!!
2025-02-22 16:11:14
427
空空如也
使用Qpainter绘制一张图片,鼠标移动到按键会自动触发paintEvent事件?
2025-01-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人