- 博客(22)
- 资源 (8)
- 收藏
- 关注
原创 基于任务组的线程池(SequentialThreadPool)
基于C++11实现的一个head-only的线程池。对任务进行分组,同一个组内的任务按照入队顺序进行执行,不同组之间的任务抢占式执行。
2024-08-02 18:14:11
359
原创 【调试记录】QT中使用多线程导致的死锁
子线程在第17行获取到锁,主线程刚好运行到24行准备获取锁。此时子线程执行第18行,阻塞调用等待主线程执行。子线程已经获取到锁,主线程等待获取锁,子线程又等待主线程事件循环执行函数,由此产生死锁。方案二:在锁外调用(仅适用于无数据竞争的情况,或采用原子变量),即去掉第17行的加锁。原因在于第18行采用阻塞队列的连接方式。方案一:将18行阻塞调用改为非阻塞调用。
2023-04-15 22:54:57
849
原创 由QCustomplot引发drawPolyline和drawLine的区别
标题一、起因二、原因分析2.1 测试2.1 查看QCustomplot中绘制源码三、解决方法四、drawPolyline和drawLine的区别五、对QCharts进行测试一、起因最近在使用QCustomplot绘制曲线图时,遇到性能低下(卡顿甚至无响应)。测试的功能为用rand()函数动态生成1000个数据点,其数据值范围为0<=X<1000, 0<=Y<100, X步进=0.1,其代码如下:#include <QApplication>#include <
2022-01-16 16:55:32
2490
原创 OpenSSL之Diffie-Hellman
// diffie_hellman.hpp#pragma once#include <openssl/dh.h>#include <memory>#include <vector>namespace crypto{ class diffie_hellman { public: diffie_hellman(); ~diffie_hellman() = default; bool create_p_g(); bool set_p_g(c
2021-11-29 22:17:29
905
原创 FFmpeg将图像数据编码为H264视频
图片数据编码为视频的步骤如下:1、 BGR数据转换为YUV格式;2.、YUV格式进行编码;其中对YUV格式进行编码又分为以下步骤:通过avcodec_find_encoder函数找到需要的编码器;通过avcodec_alloc_context3初始化编码器上下文,并设置编码器上下文的参数(包括码率、时间基、视频宽高等);通过avcodec_open2函数打开编码器;通过avformat_alloc_output_context2函数初始化输出文件上下文;通过avformat_new_str
2021-09-25 22:50:00
4913
5
原创 C++11模板元编程—std::enable_if使用说明
std::enable_if 顾名思义,满足条件时类型有效。作为选择类型的小工具,其广泛的应用在 C++ 的模板元编程中。它的定义也非常的简单:// STRUCT TEMPLATE enable_iftemplate <bool _Test, class _Ty = void>struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty>struct enable_if<true, _
2021-08-29 13:52:02
7100
原创 C++模板元实现序列化
/* 序列化说明 * 1.包组成: * ----------------------- * | 包长度 | 数据 | * |-----------------------| * | int | char[] | * ----------------------- * 2.数据组成 * ------------------------------------------------------------------------.
2021-06-20 15:42:50
804
原创 C++虚函数实现模拟
目录前言虚函数表分析虚函数模拟实现虚函数原理分析前言虚函数的实现包含两个重要部分,虚函数表和虚函数表指针。虚函数表:一个类如果有虚函数,则针对这个类会产生一个虚函数表;虚函数表属于类。虚函数表指针:生成这个类的对象时,对象里就包含了一个指针(虚函数指针),用来指向这个虚函数表的起始地址;虚函数表指针属于对象,一般位于对象内存的起始位置。虚函数表分析看如下示例代码(代码1),父类Base包含三个虚函数f、g、h,子类Derive重写了其中两个虚函数f、g:class Base{pub
2020-11-15 23:00:29
301
原创 C++大量线程等待与唤醒
一、线程唤醒方法C++11之后提供了thread线程类,可以很方便的编写多线程程序。线程的等待和唤醒使用条件变量condition_variable和锁mutex结合实现,其中条件变量提供了wait(), notify(), notifyAll()等方法。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用,则是唤醒当前条件变量上的等待线程;notify()是随机唤醒单个等待的线程,而notifyAll()是唤醒
2020-06-20 18:01:36
11626
2
原创 QtCharts图形移动和缩放
功能实现QtCharts曲线图移动和缩放:按住鼠标左键拖动曲线可移动曲线;滚动鼠标滚轮实现图形X轴方向的缩放;安装Ctrl,滚动鼠标滚轮实现图形Y轴方向的缩放;按鼠标右键恢复图形初始状态;缩放过程以鼠标当前位置为缩放中心;鼠标移动过程中会在左上角显示当前坐标。实现继承QChartView,主要重新实现鼠标事件和键盘事件。移动图形利用QChart的scroll函数;voi...
2020-04-27 22:30:42
13192
5
原创 C++虚函数实现原理
C++虚函数实现原理前言实现机制实例分析测试代码及输入结果结果分析前言C++中的虚函数的作用主要是实现了多态的机制。基类定义虚函数,子类可以重写该函数。实现机制每个类对象添加一个成员,该成员中保存了一个指向函数地址数组的指针,称为虚表指针(vptr),该数组称为虚函数表(virtual function table, vtbl),即,每个类使用一个虚函数表,每个类对象用一个虚表指针。实例...
2020-04-26 23:12:15
270
原创 QtXlsx编译安装
一.下载QtXlsx类,地址:https://github.com/VSRonin/QtXlsxWriter二.安装Perl5方式一:官网下载安装。下载Perl5地址:https://www.perl.org/get.html,根据你Qt版本(编译器版本)下载对应版本(32bit或64bit),我采用QtCreator编译器mingw53_32,所以下载strawberry-perl-5....
2019-12-23 11:22:52
3036
1
原创 单链表反转原理及实现
1 节点定义单链表节点的数据结构定义如下:/* 定义结节点 */typedef struct _Node{ int value; Node* next;}Node;2 方法:迭代法2.1 思路遍历整个链表,并把当前节点的next指向上一节点。2.2 分析1.初始链表状态如下图所示。2.定义节点指针①定义前向节点指针,并初始化为head。Node*...
2019-12-19 17:37:23
654
原创 CUDA求序列最大值
CUDA并行计算中,求最大值和求和原理一样,都属于规约算法。我是求复数模长的最大值。核函数如下:__global__ void array_max(const Complex* __restrict__ in, float* __restrict__ blockMax, const int in_len){ extern __shared__ float sha_partialMax...
2018-11-26 19:38:58
6080
原创 C++ 11实现信号量
/************************************//* 文件名:CSemaphore.h *//* 功 能:C++11信号量 *//************************************/#ifndef _CSEMAPHORE_H_#define _CSEMAPHORE_H_#include <mutex&g...
2018-11-26 19:24:29
3235
原创 Ubuntu 嵌入式交叉编译环境搭建
仅以一个arm-linux-gcc讲解交叉编译工具安装配置,许多用户安装后编译或者查看gcc时出现: not found,出现这种情况是环境配置有问题。当然网上也有许多配置说明,但许多都只能在root用户下使用,切换为普通用户后会又出现: not found,其实还是环境配置不完整,只配置了root用户下的环境变量,而没有配置当前普通用户的环境变量。下面我将介绍一下我的配置方法:一、解压...
2018-06-28 16:34:39
2221
原创 解决C++调用Python中文乱码
C++调用Python,包括参数传递及返回值的处理的教程都很多。但是对于中文字符作为参数传递时,会遇到编码问题而乱码甚至崩溃。经过搜集资料,终于解决乱码问题,特记录在此:1、参数传递一般采用PyObject* objArg = Py_BuildValue("s", "Hello")构建参数,当输入参数为中文时,objArg则返回为空指针。原因是:Python为UTF-8编码,而C++中中文大多采用...
2018-04-09 22:40:37
4247
3
原创 C语言读写二进制文件
#include <stdio.h>#include <stdlib.h>int main( ){ //要写入文件的数字 double num1 = 76.54321; int num2 = -1234567; FILE* fpw = NULL; if ((fpw = fopen("test.dat", "wb")) == NULL) { fprin...
2018-04-09 21:18:48
9976
原创 Qt应用程序文字显示不全
用Qt写了一个模拟购票系统,在自己电脑(Windows10,分辨率:1366*768)上运行界面正常。当在别人电脑(windows7、windows10,分辨率都为:1920*1080)上运行时就出现了一些文字被遮挡覆盖的现象。查阅了大量资料,发现没有具体讲述是什么原因的(可能查阅资料能力有限),于是自己分析了几天,终于有了结果,在这里给大家分享一下。一、测试过程:我又找了...
2017-10-27 19:16:04
13770
5
原创 U盘无法识别读取
U盘插进电脑里有提示音,但是打开我的电脑却没有U盘,点击桌面右下角的小三角,里面也有U盘图标,该怎么让它显示读取出来呢?第1步:在此电脑上点击鼠标右键,选择管理第2步:点击左侧存储下面的磁盘管理,在右侧显示了当前系统的所有磁盘,其中可移动磁盘列有一个磁盘(就是未显示出来的磁盘,因为没有驱动器号) 第3步:选择该移动磁盘,点击鼠标右键选择更改驱动器号和路径....
2017-10-24 18:17:31
2872
1
QtCharts图形移动和缩放
2022-11-28
二进制文件转CSV文件
2020-04-27
QtCharts图形移动和缩放
2020-04-27
DBSCAN-1D密度聚类
2019-09-17
C++二进制文件读写
2018-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人