自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (4)
  • 收藏
  • 关注

原创 c++单例模式

a. 如果要进行线程同步,访问量比较大,或者可能访问的线程比较多时,采用饿汉实现,可以实现更好的性能。2、提供一个全局的静态方法getInstance(全局访问点),便于提供从类外部获取单例类的唯一实例的方法。b. 饿汉式:类文件加载的时候创建对象,如果对象一直没有使用,则类对象浪费空间。1、构造函数私有化,防止从类外调用构造函数,保证在任何情况下只生成一个实例。a. 懒汉式:使用的时候才创建,多线程访问的时候线程不安全(双检锁)3、在类中定义一个静态指针,指向本类的变量的静态变量指针。

2023-04-05 20:46:26 134

原创 赋值运算符重载

以上写法可以满足拷贝构造的基本需求,但存在一个问题,当delete自身内存后,在分配一个新的内存时,此时如果内存不足将会抛出一个异常终止此次内存分配。同时自身内存也没有了,为下面异常处理提供难度和不便。与tmp交换指针后,tmp的内存为原来的内存,离开作用域后将被析构,而本身的m_pData所指向的新内存为由MyString tmp(str)构造出来的内存,如此完成了拷贝构造。在没有析构自己前先分配内存,如果此时分配内存失败(内存异常),那么自己的数据仍然没有丢失,后面便于异常处理。

2023-04-03 21:45:38 109

原创 c++ 11多线程 传递类成员

【代码】c++ 11多线程 传递类成员。* 用类的成员函数作为线程参数 `thread thread(&A::myprint, myobj); (参数分别为成员函数,对象,参数)`

2022-09-04 21:55:53 667

原创 c++ 11多线程 传递智能指针

* 独占式指针只能通过std::move()才可以传递给另一个指针* 传递后 myptr就指向空,新的buff_ptr指向原来的内存* 所以这时就不能用detach了,因为如果主线程先执行完,ptn指向的对象就被释放了

2022-09-04 21:42:50 1013

原创 c++ 11多线程传递类对象

* 传递类对象时:虽然线程入口采用引用接收,但并不是真实的引用,而是相当于值传递,要调用一次拷贝构造;只有在传参时加上std::ref()才是真实的引用* 当加上std::ref()后,在子线程中修改buff.m_i,主线程中的buff.m_i也会一起变

2022-09-04 21:28:55 1127

原创 c++11 多线程传参问题

* 传递值引用时:可以观察到addr_i_thread与addr_i所表示的地址不一样,因此可以断定,当线程中即使传入引用,其实并不是真实的引用,也是值传递,因为将i又额外的复制了一份存入到不同的地址中,当主线程结束,不会影响子线程* 传递指针时: 可以观察到,当线程传入字符串指针时,addr_buff_thread与addr_buff一致,也就是说两个线程共用一个内存,如果主线程结束,那么子线程就会出现错误* 传递字符串时:可以观察到当传入string引用时,则addr_buff_thread与add

2022-08-21 20:51:52 524

原创 c++11 detach()子线程对象生命周期分离

* detach():分离,主线程不与子线程汇合,各自独立自行,主线程结束,子线程也能够运行;* 一旦detach()后,与这个线程关联的thread对象就会失去与这个主线程的关联,此时子线程就会驻留后台运行;* 这个子线程将会被系统运行时库接管,当这个子线程执行完成后,由运行时库负责清理该线程相关的资源(守护线程)* 使用detach将会失去对线程的控制,join与detech不能同时使用

2022-08-21 18:23:19 1425 1

原创 c++11 创建一个线程

整个进程执行的完毕结束的标志是主线程结束;此时,如果其他子线程还没有执行完毕,那么子线程也会被操作系统强行终止,系统抛出异常;良好的程序应该是主线程等待子线程执行完毕后,自己才能退出;

2022-08-21 17:44:51 376

原创 pybind11 绑定回调函数传递结构体的引用

采用pybind11 绑定std::function 回调函数,回调函数的传入参数是一个自定义类的引用。python端的调用过程:运行python程序,会报错:debug发现析构函数执行了两遍原因是:解决办法:pybind11在绑定类时添加py::nodelete禁止python端对类的析构再次执行程序可以发现析构函数只被执行了一次...

2022-07-06 17:28:05 1053

原创 Linux系统程序设计——进程

进程介绍进程启动和终止c 程序启动过程内核启动特色例程启动例程在进程的main函数执行之前内核会启动该例程放置在/lib/libc.so.***中编译器在编译时会将启动例程编译进可执行文件中启动例程作用搜集命令行的参数传递给main函数中的argc和argv搜集环境信息构建环境表并传给main函数登记进程的终止函数进程终止正常终止从main函数返回调用exit(标准c库函数)调用_exit或_Exit(系统调用)最后一个线程从其启动例程返回最后一个

2022-05-06 13:49:07 701

原创 Linux系统程序设计——文件操作

文件属性文件属性操作函数文件属性查看node 索引节点编号:544365文件类型 :文件类型是’-’,表示这是一个普通文件文件权限:rw-r–r-- 表示文件可读、可写、可执行,文件所归属的用户组可读可执行,其他用户可读可执行硬链接个数:表示a.txt这个文件没有其他的硬链接,因为连接数是1,就是他本身文件属主:表示这个文件所属的用户,这里的意思是a.txt文件被root用户拥有,是第一个root文件属组:表示这个文件所属的用户组,这里表示a.txt文件属于root用户组,是第二个

2022-04-19 12:40:23 1169

原创 Linux系统程序设计——文件IO

标准C的IO缓存类型全缓存要求填满整个缓存区后才能进行IO系统调用。对磁盘文件通常使用全缓存访问。行缓存设计一个终端时(例如标准输入和标准输出),使用行缓存行缓存满自动输出碰到换行符自动输出无缓存标准错误流stderr通常是不带缓存区的,这使得错误信息能够尽快显示出来/**************************************************** * Description: example1 行缓存案例: * 1、行缓存满自动输出,"

2022-04-11 21:59:40 449

原创 多线程异步操作std::async、std::future、std::promise

一、异步操作:std::async、std::future创建后台任务并返回值同步异步:同步是让一个任务执行完了下一个任务才能开始,异步可近似认为同时在做std::async:是一个函数模板,用来启动一个异步任务,启动起来一个异步任务后,返回一个std::future对象什么是启动一个异步任务:就是自动创建一个线程并开始执行对应的线程入口函数,返回一个std::future对象,这个返回一个std::future对象里含有入口函数返回的结果(线程返回值)在线程执行完毕后,通过future的成员函.

2021-12-03 21:08:35 670

原创 std::condition_variable的使用

std::condition_variable使用要包含头文件#include <condition_variable>定义condition_variable对象:std::condition_variable my_cond;condition_variable成员函数wait(): my_cond.wait(my_lock,[this]{ if (!msgQueue.empty()) { ..

2021-11-26 14:58:52 685

原创 单例模式简介

因为在设计或开发中,肯定会有这么一种情况,一个类只能有一个对象被创建,如果有多个对象的话,可能会导致状态的混乱和不一致。这种情况下,单例模式是最恰当的解决办法。它有很多种实现方式,各自的特性不相同,使用的情形也不相同。今天要实现的是常用的三种,分别是饿汉式、懒汉式和多线程式。通过单例模式, 可以做到:1.确保一个类只有一个实例被建立2.提供了一个对对象的全局访问指针3.在不影响单例类的客户端的情况下允许将来有多个实例例程:#include <QCoreApplication>#.

2021-11-25 20:40:53 61

转载 unique_lock使用

目录1.unique_lock取代lock_guardunique_lock的第二个参数2.1 std::adopt_lock2.2 std::try_to_lock2.3 std::defer_lockunique_lock的成员函数3.1 lock(),加锁3.2 unlock(),解锁3.3 try_lock()3.4 release()unique_lock所有权的传递1.unique_lock取代lock_guardunique_lock是个类模板,工作中,一

2021-11-23 21:34:46 689

原创 linux下用QT捕获程序异常

linux下的QT,没有类似VS捕获系统级异常的功能,可以采用qbreakpad捕获系统级异常。用法如下:下载qbreakpad源码:git clone https://github.com/buzzySmile/qBreakpad.git下载breakpad源码qbreakpad编译需依赖breakpad,执行以下命令安装breakpadgit clone https://github.com/google/breakpad下载linux-syscall-support没有这个

2021-11-20 21:00:22 3126

原创 一次性创建多个线程、互斥量、死锁

一、创建和等待多个线程:a)多个线程执行程序是乱的,跟操作系统内部对线程的运行调度机制有关b)主线程等待所有子线程运行结束后,最后主线程结束,推荐使用join,更容易写出稳定的程序c)把thread对象放入容器里,便于管理二、数据共享问题a)只读的数据:是安全稳定的,不需要特别的处理手段,直接读就可以b)有读有写:如果代码没有特别处理,程序必然崩溃。 最简单的处理方法是,读的时候不能写,写的时候不能读,所有写的线程不能同时写,所有读的线程不能同时读;c) 保护共享数据:操作时,某个线程用代码.

2021-11-17 15:15:39 235

原创 智能指针应用

auto_ptr :不允许隐式构造不能将同一个裸指针赋值给多个智能指针允许拷贝构造和赋值构造,当进行拷贝构造或者赋值构造时,会将原智能指针置空清楚资源直接deleteunique_ptr:不允许隐式构造不能将同一个裸指针赋值给多个智能指针不允许普通拷贝构造和赋值构造允许对即将死亡的对象做拷贝构造和赋值构造清除资源调用deleter(删除器)shared_ptr不允许隐士构造不能将同一个裸指针赋值给多个智能指针允许并且可以进行拷贝构造和等号运算符重载weak_ptr无效.

2021-11-10 20:21:15 502

原创 c++创建线程注意事项(2)

线程ID:std::this_thread::get_id()获取线程ID传递类对象时:虽然线程入口采用引用接收,但并不是真实的引用,而是相当于值传递,要调用一次拷贝构造;只有在传参时加上std::ref()才是真实的引用当传入智能指针时,需要使用std::move()转换用类的成员函数作为线程参数 (参数分别为 &成员函数名,对象名,参数)#include <iostream>#include <thread>using namespace std;.

2021-11-06 20:57:30 481

原创 c++ 创建线程注意事项

整个进程执行的完毕结束的标志是主线程结束;此时,如果其他子线程还没有执行完毕,那么子线程也会被操作系统强行终止,系统抛出异常良好的程序应该是主线程等待子线程执行完毕后,自己才能退出步骤:a)包含头文件b)自定义线程执行函数c)创建子线程thread mythread(mySonThread)d)join() :汇合,阻塞主线程并等待子线程执行完,继续往下执行主线程detach():分离,主线程不与子线程汇合,各自独立自行,主线程结束,子线程也能够运行一旦detach()后,与这个线程关联.

2021-11-02 20:20:02 184

原创 关于c++11多线程thread类对象作为参数传递,拷贝构造次数问题

thread在使用类对象作为参数传递过程中,常常会出现多次拷贝构造的情况,理想中的情况是只需一次拷贝构造。原因是由于不同编译器对thread函数处理是不同的。测试代码#include <iostream>#include <unistd.h>#include <thread>using namespace std;/** * 用类对象创建线程 */class SonTheardClass{public: SonTheardClass(in

2021-10-31 21:55:50 1272

原创 手撕PID(带死区、积分分离、不完全微分)

手撕PID(带死区、积分分离、不完全微分)一、位置式PID二、积分分离三、不完全微分PID四、带死区的PIDc++程序实现一、位置式PIDΔU(k)=kp*(err(k)-err(k-1))+kie(k)+kd(e(k)-2*e(k-1)+e(k-2))U(k)=U(k-1)+ΔU(k)二、积分分离在过程的启动、结束或大幅度增减设定值时,短时间内系统输出有很大偏差,会造成PID运算的积分累积,引起超调或者振荡。为了解决这一干扰,人们引入了积分分离的思想。其思路是偏差值较大时,取消积分作用,以免于超

2021-08-21 15:03:54 5887 3

转载 linux系统编程——文件IO(open()函数)

作用:Open函数用来打开一个文件,建立一个文件描述符到 文件路径的映射,建立文件标识;我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。函数原型:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);函数头文件:#include <sys/types.h>#include <sys/stat.h>#incl

2021-03-12 11:27:55 280

原创 LeetCode 4_寻找两个正序数组的中位数(c++实现)

问题:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5程序设计如下:首先将两个数组压入同一个vector完成

2020-10-16 16:15:17 217 1

原创 操作臂动力学

2020-10-13 09:04:48 198

原创 笛卡尔坐标系的建立

](https://img-blog.csdnimg.cn/20201013085800525.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NjAxNjI1,size_16,color_FFFFFF,t_70#pic_center)![在这里插入图片描

2020-10-13 08:59:59 1527

原创 操作臂运动学

2020-10-13 08:54:15 134

原创 位置、位姿与坐标系

2020-10-13 08:49:09 605

原创 Leetcode 3_无重复最长子串(c++实现)

题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。程序

2020-09-29 21:50:05 247

原创 Leetcode 2_两数相加(c++实现)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807程序设计如下:#include<iostream>#i

2020-09-16 16:53:31 252

原创 leetcode 1_两数之和(c++实现)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。例如:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]实现过程如下:#include <iostream>#include <vector>using namesp

2020-09-13 15:14:07 272

原创 基于μC/OS-Ⅱ微差压变送器的设计

随着工业的发展,越来越多的场合需要对液位、蒸汽、气体等微小压力的变化进行测量,因此有必要设计一款适应以上场合的微差压变送器。本文设计的检测装置主要用于检测环境的微差压,可进一步判断气体流动方向以及测量管道气体流量,然后将测量值转变成4~20mA电流信号输出。本装置可应用于医疗事业,例如保护性隔离、阻断空气中病菌传播、呼吸机压力检测等。该系统以STM32作为中央处理器,采用SM5651作为压力传感器采集压力数据,采集的模拟量经过运放处理、AD采样、数字滤波后,通过RS485通信模块与PC机通信,将数据实时

2020-07-26 11:20:37 611

Liunx 进程学习相关的例程

https://blog.csdn.net/qq_45601625/article/details/124351117?spm=1001.2014.3001.5502 所涉及的所有例程及源码

2022-05-06

Linux系统程序设计_文件操作例程

https://blog.csdn.net/qq_45601625/article/details/124196777示例的工程文件

2022-04-19

Linux系统程序设计_文件IO例程

https://blog.csdn.net/qq_45601625/article/details/124109772?spm=1001.2014.3001.5502 文章中所设计的代码均在这个文件中

2022-04-11

linux下QT捕获异常所需安装包.zip

由于linux下QT捕获异常所需安装包大部分需要从google或者github下载,如果不翻墙下载速度十分慢,在此将breakpad、qbreakpad等安装包提供给大家,catchException为测试例程

2021-11-20

空空如也

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

TA关注的人

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