自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 【Yolov8部署】 VS2019 + opencv + onnxruntime 环境下部署目标检测模型

本文主要研究场景为工业场景下,在工控机与工业相机环境中运行的视觉缺陷检测系统,因此本文主要目的为实现c++环境下,将yolov8已训练好的检测模型使用onnxruntime 部署通过cpu或gpu cuda加速进行检测运算。

2025-03-31 21:01:04 808

原创 【Yolov8部署】 VS2019 + opencv - dnn CPU环境下部署目标检测模型

本文主要研究场景为工业场景下,在工控机与工业相机环境中运行的视觉缺陷检测系统,因此本文主要目的为实现c++环境下,将yolov8已训练好的检测模型部署在opencv中通过cpu进行检测运算如下为成功运行例程,检测图像涉及科研项目,此处不便展示。

2025-03-27 21:48:43 642

原创 QT网络通信的接口与使用

在Qt中实现TCP通信主要依赖 QTcpServer(服务端)和 QTcpSocket(客户端和服务端通信)类。TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯。控制器可以设置为服务器端或客户端。服务端(简化版)Q_OBJECTpublic:private:客户端(简化版)Q_OBJECTpublic:private:运行效果。

2025-03-24 20:40:47 678

原创 c++中的四种cast转换

C++继承并扩展C语言的传统类型转换方式,提供了功能更加强大的转型机制(检查与风险)C++11之后,C++中就有四种类型转换,分别是,一般用这四种强制转换可以替代在c代码中类似(int)这种方式的转换。如这个表达式将expression转换为一个type-id类型的对象。Type-id必须是一个指针、指向一个已经定义类的类型或一个指向 VOID 的指针。Expression的类型必须是一个指针,如果type-id是一个指针;当type-id是一个引用的时候必须是一个左值。

2025-03-24 17:02:46 859

原创 MySQL学习笔记(四)

介绍视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的S0L逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条5QL查询语句上。全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

2025-03-24 16:19:57 1044

原创 MySQL学习笔记(三)

连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层:第二层架构主要完成大多数的核心服务功能,如QL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。引擎层:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过AP!和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。存储层。

2025-03-24 15:00:49 943

原创 QT线程同步

多线程编程的一个主要挑战是避免数据竞争和条件竞争。数据竞争发生在多个线程同时读写共享数据,而没有适当的同步机制时。条件竞争是指多个线程以特定的时序执行特定的操作,导致不期望的结果。同步策略在保护线程安全的同时,也可能会引入额外的性能开销。例如,锁的不当使用可能导致线程争用,从而降低效率。锁的粒度:选择合适的锁粒度,以减少争用和上下文切换的开销。锁的类型:根据应用场景选择互斥锁、读写锁(QReadWriteLock)、递归锁(QRecursiveMutex)等。

2025-02-25 21:50:09 929

原创 cpp智能指针的原理与使用

智能指针不是指针,是一个管理指针的类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏和空悬指针等等问题。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源。智能指针的历史历程:C++ 98 中产生了第一个智能指针auto_ptr。C++boost给出了更加实用的scoped_ptr(防止拷贝) 和 shared_ptr(引进引用计数) 和 weak_ptr。

2025-02-25 21:49:24 897

原创 QT控件与提升(自定义类)

在Qt开发中,控件提升是一个实用但常被低估的概念。它通过将标准的基础控件(Base Widget)升级为功能更强大、更定制化的自定义控件(Custom Widget),从而允许开发者在设计界面时突破Qt基础控件的限制,实现更复杂的功能和更优化的用户体验。这一概念与C++编程中“接口与实现分离”的原则不谋而合。正如Scott Meyers在《Effective C++》中所强调的,这种分离能够增强代码的灵活性和可维护性。

2025-02-19 20:14:27 673

原创 线程池以及在QT中的接口使用

在并发编程中,当我们使用线程时,通常的做法是在需要时创建一个新的线程。这种方法实现起来较为简便,但存在一个显著问题:如果并发线程数量较多,且每个线程仅执行一个耗时较短的任务,频繁地创建和销毁线程将显著降低系统效率,因为线程的创建和销毁本身需要消耗一定的时间。那么,是否存在一种机制可以使线程在执行完一个任务后不被销毁,而是能够继续执行其他任务,从而实现线程的复用呢?线程池(Thread Pool)正是这样一种多线程处理模式。在线程池中,任务被添加到队列中,线程池在创建线程后会自动启动这些任务。

2025-01-30 23:19:38 1328

原创 QThread的使用流程与事件循环

事件循环:事件循环的作用:在run()函数中添加事件循环后,run()函数中的内容执行完后,线程还会运作,启动事件循环后,主线程还可以和子线程通过信号与槽的方式继续使用。1.使用exec()来启动事件循环2.exec()后面的内容将不会运行,直到退出事件循环3.使用quit()退出事件循环4.只有槽函数所在线程开启了事件循环,它才能在对应信号发射后被调用5.无论事件循环是否开启,信号发送后会直接进入槽函数所依附的线程的事件队列。

2025-01-10 12:53:28 867

原创 QThread多线程详解

在阅读本文之前,你需要了解进程和线程相关的知识,详情参考《Qt 中的多线程技术》在很多文章中,人们倾向于把 QThread 当成线程的实体,区区创建一个 QThread 类对象就被认为是开了一个新线程,当然这种讨巧的看法似乎能快速的让我们入门但是只要深入多线程编程领域后就会发现这种看法越来越站不住脚,甚至编写的代码脱离我们的控制,代码越写越复杂。最典型的问题就是"明明把耗时操作代码放入了新线程,可实际仍在旧线程中运行"。

2025-01-09 21:41:25 783

原创 MySQL学习笔记(二)

1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。2.目的:保证数据库中数据的正确、有效性和完整性。对字段数据约束id int primary key auto_increment '主键',name varchar(10) not null unique comment '姓名',age int check (age >0 && age

2025-01-08 17:28:55 650

原创 MySQL学习笔记(一)

MySQL启动与停止DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。DCL英文全称是Dala ControlLanguaqe(数据控制语言),用来管理数据库用户,控制数据库的访问权限制。

2024-12-24 17:45:18 1012

原创 设计模式c++(二)

重构技法静态 ->动态早绑定 ->晚绑定继承 ->组合编译时依赖 ->运行时依赖紧耦合 -> 松耦合设计模式最频繁使用的结构未框选模式在设计中使用的比较多什么时候不用模式代码可读性很差时需求理解还很浅时变化没有显现时不是系统的关键依赖点项目没有复用价值时项目将要发布时经验之谈不要为模式而模式关注抽象类 &接口理清变化点和稳定点审视依赖关系要有Framework 和Application的区隔思维>良好的设计是演化的结果设计模式成长之路。

2024-12-04 20:28:31 1105

原创 设计模式c++(一)

在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的工厂完全可以。

2024-12-03 21:40:26 1253

原创 Linux多进程学习笔记(六)Socket

跨主机传输要注意的问题1字节序问题大端:低地址处放高字节小端:低地址处放低字节主机字节序:host网络字节序:network解决:_ to _ _ :htons,htonl,ntohs,ntohl字节序问题(Byte Order Issue),也称为端序问题(Endianness Issue),是指在不同计算机系统中数据的字节排列顺序的差异。这主要涉及到多字节数据类型(如整数、浮点数等)在内存中的存储顺序。

2024-11-12 21:44:27 715

原创 Linux多进程学习笔记(五)进程间通信

在多线程编程中,线程间通信(Inter-Thread Communication,ITC)是必不可少的。共享内存消息传递信号量(Semaphores)互斥锁(Mutexes)条件变量(Condition Variables)屏障(Barriers)读写锁(Read-Write Locks)事件(Events)信号(Signals)共享变量内存映射文件(Memory-Mapped Files)套接字(Sockets)管道(Pipes)数据传输。

2024-11-08 20:45:53 898

原创 Linux多进程学习笔记(四)高级IO

(Input/Output)是一种 I/O 操作模式,其中 I/O 请求不会使发起请求的进程挂起(阻塞),如果请求不能立即完成,而是立即返回一个错误码,通常是 EAGAIN 或 EWOULDBLOCK。writev 是 Linux 系统中的一个系统调用,用于将多个非连续的内存缓冲区中的数据写入文件描述符,这个过程被称为“聚集写”(gather write)。通过 mmap,进程可以直接访问文件内容,就好像它们是内存的一部分一样,这可以提高文件 I/O 操作的效率。

2024-11-04 16:23:08 841

原创 QT对象模型

标准 C++对象模型(C++ object model)非常高效地支持对象范式(object paradigm)。然而在某些方面却表现不足,比如信号的传递、事件的传递和处理等。GUI编程既要求运行时的高效性又需要有更好的灵活性。Qt GUI编程语言结合了Qt对象模型(Qt Object Model)的灵活性,以及标准 C++运行时的高效性。为了更好地满足 GUI图形用户界面编程,Qt的对象模型在标准 C++的基础上新增了一些特性:元对象系统(Meta-ObjectSystem),提供。

2024-10-31 16:22:22 914

原创 qt的信号与槽机制

所谓回调,就是事先将一个回调函数(callback function)指针传递给某一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理过程的目的。信号是一个特定的标识:一个槽就是一个函数,与一般的函数不同,槽函数既能够和信号关联,也能够像普通函数一样直接调用。在程序中,使用QObject:connect0函数来将某个信号和某个槽进行关联,而信号和槽之间的真正关联是由Qt的信号和槽机制来实现的。除了能够在程序中手动关联信号和槽之外,Qt的元对象提供了信号和槽的自动关联。

2024-10-30 11:52:35 1212

原创 Linux多进程学习笔记(三)并发(线程)

文章目录线程一、线程的概念二、线程的生命周期1.线程的创建2.线程的终止3.栈的清理4.线程的取消选项5.线程分离三、线程同步1.互斥量2.条件变量3.信号量4.读写锁四、线程属性1.线程的属性2.线程同步的属性五、重入1.线程与信号2.线程与fork六、竞争故障线程一、线程的概念一个正在运行的函数posix线程是一套标准,而不是实现openmp线程线程标识:pthread_t线程ID是用pthread_t数据类型表示,为一

2024-10-28 16:10:58 1046

原创 Linux下vscode配合gdb与cmake管理工程

cmake管理工程,配合gdb使用vscode图形化调试使用cmake管理项目简单快捷,而vscode图形化界面易于上手,图形化编译操作简单方便。

2024-10-17 19:42:47 1042

原创 Linux多进程学习笔记(二)并发(信号)

早期UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理是因为一个信号发生了,进程捕捉到它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用

2024-10-16 15:55:22 826

原创 Linux多进程学习笔记(一)

有8种方式使进程终止(termination),其中5种为正常终止,它们是:在 C 语言中,exit、_exit 和 _Exit 都是用来终止当前进程的函数,但它们在终止进程时的行为有所不同。函数原型:status:退出状态码,通常 0 表示成功,非零表示错误。函数原型:status:退出状态码。函数原型:status:退出状态码。fork() 返回两次:在父进程中返回子进程的进程ID(一个正整数),在子进程中返回0。如果发生错误,则在父进程中返回 -1,并设置 errno 以指示错误。在for

2024-10-10 16:56:09 893

原创 #google命名法cpp

函数命名, 变量命名, 文件命名要有描述性;少用缩写.尽可能使用描述性的命名, 别心疼空间, 毕竟相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过砍掉几个字母来缩写单词.注意, 一些特定的广为人知的缩写是允许的, 例如用i表示迭代变量和用T表示模板参数.模板参数的命名应当遵循对应的分类: 类型模板参数应当遵循的规则, 而非类型模板应当遵循的规则.

2024-10-08 20:06:01 874

原创 Linux下动态库与静态库学习笔记

库有两种:静态库和共享库(动态库)。win32平台下,静态库通常后缀为.lib,动态库为.dll;linux平台下,静态库通常后缀为.a,动态库为.so。动态库与静态库均以文件的形式存在,其本质上是一种可执行代码的二进制格式,可以被载入内存中执行。无论是动态链接库还是静态链接库,它们无非是向其调用者提供变量、函数和类。静态库(.a后缀结尾):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。

2024-10-08 17:19:37 907 1

vmware workstation虚拟机软件安装包

vmware workstation虚拟机软件安装包

2024-10-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除