
VC算法与小工具实现
文章平均质量分 64
以C/C++为主,分享算法的C实现、软件小程序等
优惠券已抵扣
余额抵扣
还需支付
¥119.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
codersnote
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【线程同步系列5】线程同步中的思考
假设还是有两个线程,前面几篇关于线程同步的方法中,虽然能够保证同一个资源同一个时刻只有一个线程占用,但是并不能保证线程1和线程2交替运行,比如线程1可能会运行5次,然后线程2运行1次。那么如果我们需要多线程交替运行,在VC中应该怎么实现呢?原创 2024-07-01 06:00:00 · 146 阅读 · 0 评论 -
【线程同步系列4】线程死锁问题及解决办法
线程1拥有了临界区对象A,等待临界区对象B的所有权,线程2拥有了临界区对象B,等待临界区对象A的拥有权,就造成了死锁。对多线程来说,如果线程1拥有了临界区对象A,等待临界区对象B的拥有权,线程2拥有了临界区对象B,等待临界区对象A的拥有权,那么这就造成了死锁。下面通过代码来演示线程死锁的发生。下面,我们来分析上述程序的执行过程。当线程1得到临界区对象g_csA的所有权之后,调用 Sleep函数,让线程1睡眠1ms,这将导致线程1暂停运行,其目的是为了让线程2优先得到临界区对象g_csB的所有权。原创 2023-04-28 05:00:00 · 662 阅读 · 0 评论 -
【线程同步系列4】线程死锁问题及解决办法
线程1拥有了临界区对象A,等待临界区对象B的所有权,线程2拥有了临界区对象B,等待临界区对象A的拥有权,就造成了死锁。对多线程来说,如果线程1拥有了临界区对象A,等待临界区对象B的拥有权,线程2拥有了临界区对象B,等待临界区对象A的拥有权,那么这就造成了死锁。下面通过代码来演示线程死锁的发生。下面,我们来分析上述程序的执行过程。当线程1得到临界区对象g_csA的所有权之后,调用 Sleep函数,让线程1睡眠1ms,这将导致线程1暂停运行,其目的是为了让线程2优先得到临界区对象g_csB的所有权。原创 2023-06-19 13:06:55 · 1101 阅读 · 0 评论 -
【线程同步系列3】基于关键代码段的VC++多线程同步及孙鑫代码在VS2017、多核CPU上的问题
经过分析,笔者认为主要原因是,线程1和线程2中While(TRUE)循环,假设线程1先运行,当保护代码运行完后执行LeaveCriticalSection(&g_cs);如果调用线程没有等待到临界区对象的所有权,该函数一直等待,从而导致线程一直等待!然而,在VC++深入详解第二版中,编译环境为VC++6.0,且可能是单核CPU,程序运行没有问题,线程1和线程2交替售票!孙鑫老师在VC++深入详解一书中,以2个线程售票为例,对基于临界区的线程同步进行了示范,代码如下。释放临界区对象,调用。原创 2024-03-22 06:51:25 · 163 阅读 · 0 评论 -
【线程同步系列2】基于Event的VC++多线程同步
事件对象也属于内核对象,包含一个使用计数一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。有两种不同类型的事件对象。一种是的事件,另一种是的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程,且在一个线程得到该事件对象后并不会将该对象设置为非信号状态,也就是说人工重置的事件对象,除非显式得调用ResetEvent,否则始终处于有信号状态。原创 2023-03-28 14:16:12 · 819 阅读 · 0 评论 -
【线程同步系列1】基于Mutex的VC++多线程同步
第一个参数传入NULL,使用默认安全性第二个参数为TRUE,指示互斥对象初始拥有者,如果为TRUE,调用者创建这个互斥对象,调用的线程获得互斥对象的所有权;否则,调用线程不获得对象的所有权。第三个参数给互斥对象起个名字,如果传入NULL,则创建匿名的互斥对象。互斥对象(mutex)属于内核对象,它能够确保线程拥有对单个资源的互斥访问权。互斥对象包含一个使用数量,一个线程ID和一个计数器。ID用于标识系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。原创 2022-09-05 06:00:00 · 433 阅读 · 0 评论 -
C++导出类中工厂函数和虚函数的结合使用
之前在看到dll导出类时,看到这篇文章其中,第三种方式个人感觉非常好,原文如下C++抽象接口(仅包含纯虚函数且不包含数据成员的C++类)同时兼顾以下两个方面:与对象无关的纯净接口,以及方便的的面向对象的调用方式。所需要做的就是为头文件提供接口声明并实现工厂函数,该函数将返回新创建的对象实例。仅工厂函数必须与说明__declspec(dllexport/dllimport)符一起声明。该接口不需要任何其他说明符。在上述代码段中,工厂函数GetObj声明为extern “C”。原创 2024-03-23 09:49:59 · 213 阅读 · 0 评论 -
SSE指令集学习使用
本篇介绍SSE指令集,SSE是流化SIMD扩展(Streaming SIMD Extension, SSE),提供全新的一组寄存器,处理128位打包数据。SSE提供了xmm寄存器,xmm一组8个128位的寄存器,分别名为xmm0-xmm7,SSE构架提供对打包单精度浮点数的SIMD支持。原创 2023-12-25 02:56:09 · 726 阅读 · 0 评论 -
SSE指令集学习使用2
在IDA中可以设置启用或禁用SSE intrinsic指令,具体操作为在IDA中反编译代码窗口(Pseudocode)中右键。实际上,函数sub_func1有6个参数,但IDA反编译之后却只有1个 参数,猜测应该是采用了浮点寄存器传递了参数。把源存储器低64位两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.将xmm1与xmm0做商,并将结果以双精度浮点数的类型存放到xmm1中。结果:xmm0=edx=sps(整数)结果:xmm1=maxind。原创 2023-12-25 02:40:59 · 289 阅读 · 0 评论 -
【MATLAB库函数系列】线性调频Z(Chirp-Z,CZT)的MATLAB源码和C语言实现
采用 FFT 算法可以很快计算出全部$N$点 DFT 值,即Z变换 $X(z)$在$z$平面单位圆上的全部等间隔取样值。而实际中也许不需要计算整个单位圆上Z变换的取样值。例如**对于窄带信号,只需要对信号所在的一段频带进行分析,这时希望频谱的取样集中在这一频带内,以获得较高的分辨率,而频带以外的部分可不考虑**。原创 2023-12-24 12:56:21 · 859 阅读 · 0 评论 -
二进制转十六进制字符串的C语言高效率实现(如“10100011“转为字符串“A3“)
对于一串二进制01比特,有时为了显示或者编辑方便高效,我们需要将二进制比特流转换成十六进制,众所周知,二进制转十六进制是每4比特进行转换,例如将以下二进制流:转换为十六进制应为:A3CD有时候,还可以每字节中间添加一个空格A3 CD下面直接上结果和代码。原创 2023-12-18 14:44:23 · 277 阅读 · 0 评论 -
Intel 高性能库之IPP信号处理简介及下载(版本5.1、6.1,含32位和64位及注册)
英特尔®集成性能基元(英特尔®IPP)是一款多核就绪的扩展函数库,其中包含众多针对多媒体、数据处理和通信应用高度优化的软件函数。它包括:视频编码:用于 DV25/50/100、MPEG-2、MPEG-4、H.263 和 MPEG-4 Part 10 (H.264) 编解码器的关键算法组件。图像和 2D 信号处理:包含多种可针对图像和图像内区域 (ROI) 执行的算法。计算机视觉:针对多种主要计算机视觉运算进行优化的函数,可用于安全、计算机控制、媒体管理、媒体注释等领域的应用程序。原创 2023-10-06 23:52:11 · 1239 阅读 · 0 评论 -
【MFC系列】MFC单文档应用程序要点(一)
那么,当第一个线程到达,信号量为FALSE,线程打开文件进行访问,并将信号量置为TRUE;当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程,且在一个线程得到该事件对象后并不会将该对象设置为非信号状态,也就是说人工重置的事件对象,除非显式得调用ResetEvent,否则始终处于有信号状态。可以看出,由于主线程初始化hMutex为有信号状态,所以线程1和线程2刚开始时会发生“争抢”,在hMutex第一次被置为无信号状态的过程中,两个线程的WaitForSingleObject语句同时执行了!原创 2023-05-03 22:15:11 · 748 阅读 · 0 评论 -
离散傅里叶变换(DFT)和基2快速傅里叶变换(FFT)算法的C语言实现
输入数据的实部 double in_image:输入数据的虚部int N: 傅立叶变换的长度: 输出数据的实部 double out_image:输出数据的虚部int type: 变换类型(“1”为离散傅立叶变换, “-1”为离散傅立叶逆变换)原创 2022-10-27 13:40:11 · 770 阅读 · 0 评论 -
【MATLAB库函数系列】快速哈达玛变换(WHT)的MATLAB源码和C语言实现
FWHT,全称为Fast Discrete Walsh-Hadamard Transform。快速Walsh-Hadamard变换在MATLAB中可以调用函数fwht直接得到结果,如下:假设向量a为256维的行向量,那么下面两句代码的执行结果是相同的!原创 2022-10-24 13:28:13 · 2206 阅读 · 0 评论 -
【MATLAB库函数系列】upfirdn(分数倍采样率变换)的C语言实现【姊妹篇2纯C语言实现】
常量和结构体定义的头文件ConstParam.h在下面文章中MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)原创 2022-09-29 06:00:00 · 1103 阅读 · 2 评论 -
【MATLAB库函数系列】resample(重采样函数)的C语言实现【姊妹篇2纯C语言实现】
常量和结构体定义的头文件ConstParam.h在下面文章中MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)原创 2022-09-28 06:00:00 · 2939 阅读 · 5 评论 -
分享一个很好用的git上用C语言实现std::vector的库并对其进行小改进
之前在FM解调C语言实现的文章中,采用了std::vector进行数据的存储和使用,而std::vector是C++的语法,C语言并不支持,有部分读者反映想知道纯C语言如何实现。其实,std::vector的C语言实现在git上有很多库,经过一番搜寻,果然找到了两个感觉比较可行的库,请看下载地址!经过笔者测试,发现第一个库采用宏定义的方式实现,且使用方法与std::vector很接近,而且非常简介,还原度高,因此本文主要介绍第一个库,感兴趣的可以看看其他两个,应该都能够满足C语言的使用!说明经过查看源代原创 2022-09-27 07:13:34 · 441 阅读 · 0 评论 -
基于Funcode和VS2017的游戏开发
主要实现了两个小游戏,飞机大战和冰火人历险记,首先用Funcode生成地图文件和VS工程,然后进行编程原创 2022-09-06 06:00:00 · 428 阅读 · 0 评论 -
根据当天日期计算下一天日期
在日常编程中,经常需要根据当前计算相邻的下一个日期,以下就是这个小算法,直接上代码。原创 2022-08-10 06:00:00 · 361 阅读 · 0 评论 -
十进制数与八进制数互相转换(MATLAB和C版本)
一、八进制数转十进制数C语言实现实现思路和参数:/* Function: ConvertOctaltoDecimal * Abstract: Convert an octal number to its equivalent decimal value * * - First compute the number of digits in the octal number * - Then perform the conversion, one digit at a time, s原创 2022-01-17 22:53:24 · 764 阅读 · 0 评论 -
MFC多线程处理界面假死之红外图像数据获取和excel写入
在MFC主界面某个Button Click事件中起一个线程去做处理一些事情,在起的线程运行完毕后,接着跑Click起线程后的代码,已达到按顺序执行,保证时许正确的目的。原创 2021-12-07 08:06:03 · 261 阅读 · 0 评论 -
【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码
1、内存四区特点a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cdb)堆、全局区(静态区)、字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快;2、C语言与C++编译器的区别:a)所有的.c文件在VC或者VS编译器中按C编译器编译;b)所有的.cpp文件在VC或者VS编译器中按C++编译器编译;c)C编译器中所有的结构体名称在调用时都必须指定struct关键字;d)C编译器中所有函数内临时变量,必须在函数起始位置定义;Linux也有C语言编译器和C++编译器:g原创 2020-12-24 14:39:49 · 425 阅读 · 0 评论 -
【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组
代码#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>enum{ READ_ONLY, HIDE, SYSTEM = 55, TEST};typedef struct SUser{ int nNumb; char sName[20]; float fMath;}DATA;typedef struct SNo原创 2020-12-23 20:59:36 · 243 阅读 · 0 评论 -
【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统
从本文开始,后续将陆续发布C++语法与数据结构的相关内容,同样还是以学生管理系统来融汇贯通所有知识点。接上篇博客【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组C++中定义CStudent类文件名:Student.htypedef struct SUser{ int nNumb; char sName[20]; float fMath;}DATA;typedef struct SNode{ DATA data; SNod.原创 2020-12-25 08:35:27 · 305 阅读 · 0 评论 -
C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针+switch
函数指针简介#include <stdio.h>int add(int a, int b){ return a + b;}int dec(int a, int b){ return a - b;}void main(){//函数名包起来,加上*号,参数要匹配 int(*pF)(int a, int b); pF = add; int t = (*pF)(32, 5);}运行结果学生管理系统#define _CRT_SECURE_NO_WARNING原创 2020-12-23 09:16:16 · 183 阅读 · 0 评论 -
OpenMP之双重for循环并行计算改进
这篇文章是基于OpenMP对Github项目schneider_et_al_2016_animaldiversity进行计算速度改进,关于该项目请参考博客:Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行项目设置设置项目支持OpenMP,右键项目(pdef_dynamics)==>属性==>C/C++==>语言==>OpenMP支持==>原创 2020-12-13 17:55:28 · 4466 阅读 · 0 评论 -
Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行
一、GSL库下载GSL简介及下载地址:GSL - GNU Scientific LibraryGSL FTP下载地址:GSL FTPGSL for Windows地址:Gsl for Windows文件主要有:以上链接中关于GSL1.8版本的所有文件,均已下载好且打包如下,可直接下载,本文主要分享编译链接过程中遇到的问题,避免看到这篇博客的人少走弯路,链接如下:二、GSL库简介GNU Scientific Library (GSL) 是一个用于科学计算的 C 语言类库,有超过1000个函数。原创 2020-11-29 00:45:18 · 746 阅读 · 0 评论 -
【MATLAB库函数系列】resample(重采样函数)的C语言实现【姊妹篇1基于std::vector】
resample的原理MATLAB中resample函数最简单的参数如下:y = resample(x,p,q)以p/q乘以原始采样速率对输入序列x重新采样。resample在x上应用抗锯齿FIR低通滤波器,补偿滤波器带来的延迟。根据以下2篇文章MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现(采用了STL::vector)MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现可以知道,resample的核心还是分数倍采样率变换,而分数倍采样率变换的核心是原创 2020-09-20 17:14:12 · 5847 阅读 · 17 评论 -
【MATLAB库函数系列】firls(最小二乘线性相位FIR滤波器设计)的C语言实现
firls函数功能FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。b = firls(n,f,a)b = firls(n,f,a,w)b = firls(n,f,a,'ftype')b = firls(n,f,a,w,'ftype')f是在0和1之间的范围内指定的频率点对的矢量,其中1对应于奈奎斯特频率。频率必须按递增顺序排列。允许重复的频点,并且实际上可以用来设计与具有矩形(Rectwine)窗口的fir1和fir原创 2020-09-20 16:12:54 · 7464 阅读 · 1 评论 -
MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现【姊妹篇1基于std::vector】
upfirdn原理yout = upfirdn(xin,h,p,q)upfirdn的功能在MATLAB官方帮助文档中说得很清楚通过插零实现ppp倍上采样对上采样之后的信号用给定的hhh(通常为低通滤波器)进行滤波对滤波结果进行qqq倍抽取实现降采样下面图片是一个很详细且易懂的例子,由采样率Fs=50kHzFs=50kHzFs=50kHz降采样至Fs=8kHzFs=8kHzFs=8kHz,信号最高频率fmax=8kHzf_{max}=8kHzfmax=8kHz,分析见图片yout = up原创 2020-09-20 09:29:47 · 3506 阅读 · 0 评论 -
MATLAB库函数unwrap(相位解卷绕)的C语言实现
什么是相位解卷绕Q = unwrap(P)Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw原创 2020-09-20 00:12:28 · 3921 阅读 · 0 评论 -
基于VS的连连看小游戏
运行环境Matlab R2018b x64 or x32Visual Studio 2017 企业版程序预览目前功能只开发了基本模式,也即是基本的连连看功能和帮助功能,界面如下文末有完整程序代码下载地址,有任何问题欢迎留言,谢谢点赞哟!程序主界面基本模式目前功能只有基本模式,界面如下程序下载代码下载地址密码:7de3获取更多内容请关注:逆向and通信爱好者coding...原创 2020-07-25 01:12:51 · 854 阅读 · 0 评论 -
Win32编程之基于MATLAB与VC交互的多项式回归
运行环境Matlab R2018b x64 or x32Visual Studio 2017 企业版程序预览文末有完整程序代码下载地址,有任何问题欢迎留言,谢谢点赞哟!程序功能描述矩阵运算是大多数科学运算的必要工具。通常情况下,Matlab是实现矩阵运算的最佳工具,但是大多数Matlab运算都是基于double类型,占据空间很大,遇到大型数据时就会内存不足的现象。一种解决途径是从MatLab中导出矩阵,在VC中运算完毕后再重新读回Matlab。本课程设计任务的目的是要求学生按照分析、设计、编原创 2020-07-25 00:48:01 · 412 阅读 · 2 评论 -
Win32编程之基于MATLAB与VC交互的幻方阵(魔方阵)输出
运行环境Matlab R2018b x64 or x32Visual Studio 2017 企业版程序预览程序功能描述矩阵运算是大多数科学运算的必要工具。通常情况下,Matlab是实现矩阵运算的最佳工具,但是大多数Matlab运算都是基于double类型,占据空间很大,遇到大型数据时就会内存不足的现象。一种解决途径是从MatLab中导出矩阵,在VC中运算完毕后再重新读回Matlab。你的程序需要与matlab交互,以获得大于等于3的任意阶的幻方(幻方阵是指每行、每列、对角线的元素相加均相同的原创 2020-06-26 15:05:11 · 578 阅读 · 0 评论