- 博客(28)
- 资源 (4)
- 收藏
- 关注
原创 C++中的try throw catch 异常处理
今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash。所以借此记录下c++关于try,throw,catch的用法。程序运行时常会碰到一些异常情况,例如:做除法的时候除数为 0;用户输入年龄时输入了一个负数;用 new 运算符动态分配空间时,空间不够导致无法分配;访问数组元素时,下标越界;打开文件读取时,文件不存在。这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃。所谓“处理”,可以是给
2021-09-25 17:00:06
1687
转载 C++二进制翻转实例分析(转)
本文实例讲述了C++二进制翻转的方法,将常用的几种解决方法罗列出来供大家比较选择。具体如下:首先来看看一个相对笨拙的算法:#include <iostream>using namespace std;void printBinary(unsigned char str, int size = 1){ int flag = 0x01; for (int i = 0; i < size; i++) { for (int i = 0; i < 8; i++) {
2021-07-24 10:55:23
649
原创 vc 记录
All 3645 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.连接器 优化 链接时间代码生成 LTCG
2021-07-23 08:46:56
170
原创 openssl 编译记录
编译环境Strawberry Perl 这里有两个版本 根据需要下载 32bit或者64bithttps://strawberryperl.com/NASMhttps://www.nasm.us/VS2019Visual Studio 2019\Visual Studio Tools\VC\x86 Native Tools Command Prompt for VS 2019或者Visual Studio 2019\Visual Studio Tools\VC\x64 Native Too
2021-07-22 16:56:42
294
原创 zlib-1.2.11编译
http://www.zlib.net/E:\zlib-1.2.11\zlib-1.2.11\contrib\vstudio\vc14\zlibvc.sln点击生成解决方案检查一下x64 masmx64Win32 masmx86C/C++ 常规 附加包含目录 masmx64C/C++ 常规 预处理器C/C++ 常规 调试信息格式 无C/C++ 代码生成 启用最小生成 否(/Gm-)WIN32ZLIB_WINAPI_CRT_NONSTDC_NO_DEPRECATE_CR
2021-07-17 16:55:41
521
原创 USES_CONVERSION
宽窄字符的转换对于C++专业户来说是经常的动作。一般两种比较方便的方法:C++:WideCharToMultiByte MultiByteToWideChar; C语言提供的转换函数为mbstowcs()/wcstombs()C++:A2W W2A (USES_CONVERSION)(追加)CStringA CStringW 之间仅用一个"="就完成了转换 神奇的很!!Love CString, Love Programming!Method 1: #include <win
2021-07-12 09:19:43
643
原创 Win32和mfc下弹出console 控制台窗口的方法
可以通过设置属性: 连接器→系统→选择 (/SUBSYSTEM:CONSOLE) 连接器→高级→入口点 输入 wWinMainCRTStartup//程序中使用 printfprintf("Hello\r\n");//可以在控制台上输出在C**App InitInstance()中 调出console窗口InitInstance(){ //添加控制台 AllocConsole(); SetConsoleTitle(_T("debug console")
2021-07-05 18:01:41
865
原创 C/C++之回调函数
在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello World程序:int main(int argc,char* argv[]){ printf("Hello World!\n")
2021-05-29 13:19:53
125
原创 编译libmodbus库
GitHub下载libmodbus源码:https://github.com/stephane/libmodbus下载解压后,进入解压目录, 进入 \libmodbus-master\src\ 文件夹,打开win32 文件夹,可以看一下README文件,文件中有生成config.h,…/modbus-version.h文件方法。一定要先生成这两个文件后,再打开modbus-9.sln解决方案进行编译,不然会报一堆错。具体操作如下:1.清空地址栏后,在地址栏输入cmd,回车,进入命令行模式;2:输
2021-05-25 14:39:08
954
1
原创 vc++全屏
/************************************************************************/ /* 自动全屏*/ //记忆原始POINT POINT old; CRect rect; GetClientRect(&rect); old.x = rect.right - rect.left; old.y = rect.bottom - rect.top; //普通的全屏 不包含系统菜单栏 需要放大按键存在 不好用 /..
2021-04-06 17:35:00
212
原创 char 格式化字符串 string
char tmp[37] = { 0 };sprintf_s(tmp, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid.Data1, uuid.Data2, uuid.Data3, uuid.Data4[0], uuid.Data4[1], uuid.Data4[2], uuid.Data4[3], uuid.Data4[4], uuid.Data4[5], uuid.Data4[6], uuid.Data4[7]);guid.
2021-04-05 09:05:35
779
转载 c++文件读写操作
对文件的读写操作是我们在做项目时经常用到的,在网上看了很多博客,结合自身的项目经验总结了一下,因此写了这篇博客,有些地方可能直接从别的博客中复制过来,但是都会注明出处。一、文件的输入输出 fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 fstream - 打开文件供读写 文件打开模式: ios::in 只读 ios::out
2021-03-29 14:55:01
1514
转载 SIMD指令学习笔记
SIMD发展所谓的SIMD指令,指的是single instruction multiple data,即单指令多数据运算,其目的就在于帮助CPU实现数据并行,提高运算效率。MMXMMX是由57条指令组成的SIMD多媒体指令集,MMX将64位寄存当作2个32位或8个8位寄存器来用,只能处理整形计算,这样的64位寄存器有8组,分别命名为MM0~MM7.这些寄存器不是为MMX单独设置的,而是借用的FPU的寄存器,占用浮点寄存器进行运算(64位MMX寄存器实际上就是浮点数寄存器的别名),以至于MMX指令和浮
2021-01-28 15:09:52
2401
原创 图像处理之卷积模式及C++实现
1. 卷积的三种模式深度学习框架中通常会实现三种不同的卷积模式,分别是 SAME、VALID、FULL。这三种模式的核心区别在于卷积核进行卷积操作的移动区域不同,进而导致输出的尺寸不同。我们以一个例子来看这三种模式的区别,输入图片的尺寸是5x5 ,卷积核尺寸是 3x3 ,stride 取 1。1.1 FULL 模式FULL 模式下卷积核从与输入有一个点的相交的地方就开始卷积。如下图所示,蓝框的位置就是卷积核第一个卷积的地方,灰色部分是为了卷积能够正常进行的 padding(一般填 0)。因此 FULL
2021-01-27 13:54:17
1304
转载 快速遍历OpenCV Mat图像数据的多种方法和性能分析
https://kezunlin.me/post/61d55ab4/- Series - Part 1: compile opencv on ubuntu 16.04 - Part 2: compile opencv with CUDA support on windows 10 - Part 3: opencv mat for loop - Part 4: speed up opencv image processing with openmp- GuideMat - for gray
2021-01-27 10:30:52
765
原创 C++11中std::async的使用详解
C++11中的std::async是个模板函数。std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对象。Fn返回的值可通过std::future对象的get成员函数获取。一旦完成Fn的执行,共享状态将包含Fn返回的值并ready。std::async有两个版本:1.无需显示指定启动策略,自动选择,因此启动策略是不确定的,可能是std::launch::async,也可能是std::launch::defe
2021-01-27 09:54:44
8973
2
原创 opencv的曲线拟合polyfit
推荐一个不错的网页,可以直接用solve函数求解方程组:http://m.blog.youkuaiyun.com/u014652390/article/details/527895914.1 曲线拟合的最小二乘法求以下拟合函数拟合条件:拟合曲线与各数据点在y方向的误差平方和最小.拟合函数为一元函数时–函数图形为平面曲线–曲线拟合解决曲线拟合,最先是确定拟合函数的形式。即适当选取选幂函数{1,x,x2, ···,xn}, 则多项式拟合函数φ(x)可表示为:φ(x)=a0+a1x+a2x2+a3x3+
2021-01-03 18:37:13
3025
原创 opencv Mat结构
Mat imgimgtest1(3, 4, CV_16UC4, Scalar_<uchar>(1, 2, 3, 4)); Mat imgimgtest2(cv::Size(3,4), CV_8UC3, Scalar_<uchar>(1, 2, 3)); Mat imgimg = imgimgtest2; cout << imgimg << endl; // Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下
2020-11-26 10:45:34
204
原创 对比直方图:compareHist 函数
double compareHist(InputArray H1, InputArray H2, int method);H1,H2,是要进行比较的直方图。method,比较方法。有如下选择:#include<opencv.hpp>#include<iostream>#include<string>using namespace std;using namespace cv;int main() { Mat src1 = imread("C:/U
2020-11-18 09:20:34
1418
原创 C++项目在不同版本vs下同时开发关于静态库等兼容性问题
由于不同vs版本使用的平台工具集版本号不同,通过在属性页 - 配置属性 - 常规 - 平台工具集 填上$(DefaultPlatformToolset) ,大概意思就是使用默认工具集版本号,而这个版本号等于当前IDE的版本号,比如2012就是v110。可以避免在切换vs开发环境时手动选择平台工具集。静态库的问题。虽然VS2015~2019 ABI兼容。但是由于VS默认开启全程序优化(/GL), 如果你没关闭,这将导致编译出来的静态库(obj组成的那种),兼容性大大降低。为了保证lib文件的通用性,建议所有
2020-11-07 14:07:13
1650
原创 c++11使用atomic多线程同步3种方法
// 使用CAS实现多线程无锁访问共享变量,达到线程同步# include <iostream># include <thread># include <mutex># include <atomic>using namespace std;std::atomic<int> var(0);void add() { int expect = var; while (!atomic_compare_exchange_
2020-10-20 17:56:13
748
原创 VS编程,C#对于带小数的数据进行取整和四舍六入五取偶的简短说明
有时对于有小数位的数据要进行取整操作或者舍入操作,这里简短说一下实现方法。1、小数取整取整分两种,向上取整和向下取整。向上取整:返回大于或等于指定双精度浮点数的最小整数。 若对象是正数,则去掉所有的小数位,并使整数位加1; 若对象是负数,则去掉所有的小数位,保留整数位;向下取整:返回小于或等于指定双精度浮点数的最大整数。 若对象是正数,则去掉所有的小数位,保留整数位;
2020-10-12 16:44:39
3014
原创 C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
将类型名作为强制类型转换运算符的做法是C语言的老式做法,C++ 为保持兼容而予以保留。C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下三个缺
2020-09-07 10:49:04
152
原创 MFC 自定义消息响应
/*CString cstr=_T("cstring传参");::SendMessage(this->GetSafeHwnd(),WM_ENGISUI_SYSMENU,0,(LPARAM)(LPCTSTR)cstr);CString str = (LPCTSTR)lParam;::SendMessage(this->GetSafeHwnd(),WM_ENGISUI_SYSMENU,0,(LPARAM)&cstr);CString* pStr = (CString*)lPar
2020-09-07 10:44:36
250
1
原创 控制 CPU占有率
此样例CPU有4核心8线程#include <iostream>#include <windows.h>#include <cmath>#define PI 3.1415926535using namespace std;const double _1000MILLI = 1000;void per_second_cpu(__int64 start_time,double busy_time_rate){ start_time = GetTickCo
2020-08-24 13:28:38
286
原创 时间差的计算对比
CQueryTime ct;//封装的QueryPerformanceCounterDWORD start_gtickcount = GetTickCount();////49天会溢出time_t first = time(NULL);clock_t start = clock();COleDateTime tm1 = COleDateTime::GetCurrentTime();//计算两个时间的间隔大于68年时就会溢出void PrintInfo(){ TRACE("CQueryTime
2020-08-19 18:43:19
1058
原创 C++ 多线程操作 std::lock_guard<std::mutex>多线程互斥量上锁
static std::mutex myttttMutex;void addLock(){ std::lock_guard<std::mutex> guard(myttttMutex);//加锁}void UpdateLoop(string str){ //doing... addLock();//需要加锁的函数可以用 std::mutex}int nSize = strlist.size();vector<std::thread> vt..
2020-08-17 09:33:42
3801
原创 C# 线程传参 回调函数更新界面控件 互斥区域上锁
public void Execute(string device,string type){object[] paras = new object[] { device,type };new Thread(new ParameterizedThreadStart(tExecute)).Start(paras);}private void tExecute(object para){object[] paras = (object[])para;string device = (string
2020-08-03 09:44:30
514
sqlite3 C++ 完整一套打包
2019-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人