C++
文章平均质量分 76
天上下橙雨
学海无涯。
展开
-
C++并发与多线程笔记八:async、future、packaged_task、promise
本文接上文 C++并发与多线程笔记七:condition_variable、wait、notify_one/all 的内容,主要记录 async、future、packaged_task、promise 概念以及用法。原创 2023-04-09 15:45:12 · 649 阅读 · 1 评论 -
C++并发与多线程笔记七:condition_variable、wait、notify_one/all
记录条件变量std::condition_variable、wait、notify_one、notify_all 概念以及用法原创 2023-03-12 11:58:54 · 725 阅读 · 0 评论 -
C++并发与多线程笔记六:单例模式下的数据共享
本文主要纪录单例设计模式下的数据共享以及 stb::call_once。原创 2022-09-18 16:42:34 · 756 阅读 · 0 评论 -
【学习笔记】C++并发与多线程笔记五:unique_lock详解
本文接上文 【学习笔记】C++并发与多线程笔记四:互斥量(概念、用法、死锁) 的内容,主要纪录 `unique_lock` 的使用方法以及原理。原创 2022-06-22 22:28:04 · 1172 阅读 · 0 评论 -
【学习笔记】C++并发与多线程笔记四:互斥量(概念、用法、死锁)
本文接上文 【学习笔记】C++并发与多线程笔记三:数据共享 的内容,主要包含互斥量的基本概念、用法、死锁演示以及解决方案。原创 2022-04-05 21:14:18 · 1811 阅读 · 0 评论 -
【学习笔记】C++并发与多线程笔记三:数据共享
本文接上文【学习笔记】C++并发与多线程笔记二的内容,主要包含创建多个线程、数据共享问题分析和案例代码。原创 2022-04-02 20:35:52 · 1477 阅读 · 0 评论 -
【学习笔记】C++并发与多线程笔记二:线程传参
本文接上文 【学习笔记】C++并发与多线程笔记一 的内容,主要包含线程传参详解,detach()的坑以及成员函数做线程函数。原创 2022-03-22 22:49:24 · 1638 阅读 · 0 评论 -
【学习笔记】C++并发与多线程笔记一:基本概念和用法
并发与多线程的基本概念与C++11中的实现。原创 2022-03-06 00:04:50 · 798 阅读 · 0 评论 -
C/C++测试程序运行时所需的栈大小
文章目录一、前言二、测试原理2.1 alloca 函数2.2 原理分析三、示例代码四、注意事项一、前言由于工作需要,最近在研究怎么测试程序用掉的栈大小,这里感谢领导给我提供了一个很不错的思路,只需要要一个 alloca 函数就能搞定,在此记录分享一下,以备不时之需。二、测试原理2.1 alloca 函数在讲原理之前,我们需要先了解一个关键的函数—— alloca 函数。alloca 函数是一个内存分配函数,与malloc、calloc、realloc类似,但是注意一个重要的区别:alloca 是原创 2021-11-21 20:34:25 · 2650 阅读 · 0 评论 -
设计模式学习(二十二):策略模式
目录一、前言二、策略模式三、示例介绍四、结构与参与者五、协作六、简单的示例代码七、总结7.1 优缺点7.2 应用场景一、前言近期参加了第十六次设计模式研讨会,主题是策略模式,接下来我们来看看该模式的具体内容。二、策略模式策略模式:在状态模式中,一个类的行为或其算法可以在运行时修改,它属于行为模式。在该模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象,策略对象改变context对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本原创 2021-10-24 19:53:43 · 298 阅读 · 0 评论 -
设计模式学习(二十一):状态模式
目录一、前言二、状态模式三、示例介绍四、结构与参与者五、协作六、简单的示例代码七、总结7.1 优缺点7.2 应用场景一、前言国庆假期前参加了第十五次设计模式研讨会,主题是状态模式,接下来我们来看看该模式的具体内容。二、状态模式状态模式:在状态模式中,类的行为是基于它的状态改变的,它属于行为模式。意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。主要解决:该模式主要用于解决对象行为依赖于它的状态(属性)的问题,可以根据对象的状态改变而改变对象的行为。比如,TCP协议网原创 2021-10-07 18:50:06 · 236 阅读 · 0 评论 -
设计模式学习(十五):命令模式
目录一、前言二、命令模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第十次设计模式研讨会,主题是命令模式,接下来我们来看看该模式的具体内容。二、命令模式命令模式:本质是对命令进行封装,将发出命令的责任和执行命令的责任分开。意图:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;比如,对请求排队或记录请求日志,以及支持可撤消的操作。主要解决:在某些场合,比如要对行为进行“记录、撤销、事务”等处理,这样将行为使用无法抵御变化原创 2021-07-04 18:59:42 · 311 阅读 · 0 评论 -
设计模式学习(十三):代理模式
目录一、前言二、代理模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 优缺点6.2 应用场景一、前言本周参加了第八次设计模式研讨会,主题是代理(Proxy)模式,接下来我们来看看该模式的具体内容。二、代理模式Proxy 模式:在该模式中,一个类代表另一个类的功能,我们创建具有现有对象的对象,以便向外界提供功能接口。意图:为其他对象提供一种代理以控制对这个对象的访问。动机:在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。核原创 2021-05-29 22:27:27 · 228 阅读 · 0 评论 -
设计模式学习(十二):享元模式
目录一、前言二、享元模式三、示例介绍四、结构与参与者五、简单的示例代码六、总结6.1 适用性6.2 优缺点和应用场景一、前言本周参加了第七次设计模式研讨会,主题是享元(Flyweight)模式,接下来我们来看看该模式的具体内容。二、享元模式Flyweight 模式:通过共享技术实现相同或相似对象的重用,减少创建对象的数量,以减少内存占用和提高性能。意图:运用共享技术有效地支持大量细粒度的对象。动机:面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。原创 2021-05-16 14:02:24 · 168 阅读 · 0 评论 -
【学习笔记4】使用匿名管道和CreateProcess隐式调用控制台程序
目录一、前言二、核心内容三、示例代码一、前言近期工作内容需要在一个程序中包装一个控制台程序,用于执行cmd命令获取结果,经过对Windows平台进程和管道通信的学习后,采用 匿名管道 和 CreateProcess 隐式调用控制台程序来实现这个需求。二、核心内容【学习笔记1】Windows平台进程创建和退出 记录了 CreateProcess 的基本用法。【学习笔记3】管道通信:匿名管道 记录了匿名管道的定义及其基本用法。本文使用匿名管道和CreateProcess隐式调用控制台程序,核心内原创 2021-05-09 19:29:22 · 335 阅读 · 0 评论 -
【学习笔记3】管道通信:匿名管道
目录一、前言二、管道的概念三、匿名管道的创建和使用3.1 函数原型3.1.1 CreatePipe3.1.2 ReadFile3.1.3 WriteFile3.1.4 CloseHandle3.2 管道使用技巧3.3 示例代码一、前言上篇笔记(【学习笔记2】管道通信:输入输出重定向)记录了输入输出重定向的实现方法,本文总结一下匿名管道的内容,希望对自己与各位有所帮助。二、管道的概念简单理解,计算机中的管道(pipe)类似现实世界中的水管,从一端放入水流,另一端就会流出来。回到计算机中,这个水流就是数转载 2021-05-09 18:44:17 · 637 阅读 · 0 评论 -
【学习笔记2】管道通信:输入输出重定向
目录一、前言二、示例介绍三、实现输入输出重定向3.1 使用C语言的freopen()函数3.1.1 函数原型3.1.2 使用方法3.1.3 示例代码3.2 使用C++的ifstream类和ofstream类3.2.1 使用方法3.2.2 示例代码一、前言近期工作内容需要研究进程间的通信,项目拟使用管道实现进程通信,因此将学习的内容简单整理一下,希望对自己与各位有所帮助。二、示例介绍本文简单介绍输入输出的重定向问题,首先看一个示例,假如有一个程序的输入输出作为标准输入输出,即从键盘上输入,然后输出(打转载 2021-05-05 21:21:59 · 787 阅读 · 0 评论 -
【学习笔记1】Windows平台进程创建和退出
目录一、前言二、进程的概念三、进程的三种状态四、进程的创建4.1 Winexec4.1.1 API声明4.1.2 示例代码4.2 ShellExcute4.2.1 API声明4.2.2 示例代码4.3 CreateProcess4.3.1 API声明4.3.2 示例代码五、进程的退出一、前言近期工作内容需要研究 Windows 平台的进程间通信,因此将学习的内容简单整理一下,希望对自己与各位有所帮助。二、进程的概念进程是资源分配的基本单位,也是独立运行的基本单位。通俗讲就是一段程序执行的过程。进程原创 2021-05-05 20:28:59 · 744 阅读 · 0 评论 -
设计模式学习(十一):外观模式
目录一、前言二、外观模式三、实际例子四、结构与参与者四、简单的示例代码五、总结一、前言本周参加了第六次设计模式研讨会,主题是外观(FACADE)模式,接下来我们来看看该模式的具体内容。二、外观模式FACADE 模式:隐藏系统的复杂性,并向客户端提供一个客户端可以访问系统的接口。意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。实现核心:在客户端和复杂系统之原创 2021-04-18 19:18:56 · 184 阅读 · 0 评论 -
计算机中int和float的储存结构以及运算性能
一、前言在前不久的转正面谈中,提到一个问题:计算机中 int 和 float 的运行到底那个更快?按想当然的理解,当然是int更快,但是我自己也没真正去测试过,不是很清楚,在实际测试后发现结果与想象大不相同。因此,本文记录一下对这个问题的思考与实践。二、int和float的储存结构要解答这个问题,首先需要知道 int 和 float 的储存结构。int 和 float 都是4个字节,但存储结构不一样,并且表示范围也不一样。紧接着就出现了一个疑问,到底哪些 int 值是 float 不能表示的呢?2.原创 2021-01-10 15:27:24 · 3789 阅读 · 2 评论 -
单元测试FIRST原则以及基于GTest进行单元测试
转载时请表明出处作者联系方式:liuyuxin0829@qq.com一、前言 在大学的时候,写代码随心所欲,想到什么就写什么,只顾实现功能,也不会去验证代码的可行性和稳定性,往往都会在在后续的使用过程中出现各种各样的问题,然后再去捉虫,这样写出来的代码质量差,在后期又耗费大量的时间修复旧代码bug。 参加工作后,接触到了单元测试,在第一个月的考核项目(智能家居控制面板)中,通过请教同事和参考AWTK源码中的单元测试代码,磕磕绊绊得写了一些单元测试,但由于没有设计好项目基础框架,业务逻辑和用户界面原创 2020-10-25 14:03:07 · 1128 阅读 · 0 评论 -
VS2012 MFC以API方式连接mysql数据库
1、添加附加包含目录在VS2012中,“项目”——“属性”——“配置属性”——“C/C++”——“常规”——“附加包含目录”,将mysql server\include的绝对路径添加进去,例如:C:\Program Files\MySQL\MySQL Server 5.6\include。也可以将include文件整个拷贝到工程目录下,然后在VS2012目录里面设置相对路径,例如:$(Pr...原创 2018-11-24 20:44:49 · 1084 阅读 · 4 评论 -
MFC 实现在主程序窗口之前弹出用户登录界面
一、登录界面设计首先在新建一个对话框,然后为该对话框新建一个基于对话框的类,在建立用户登录界面的时候,在添加两个示例编辑框的同时,添加变量(CString 类型)m_strUser和m_strPassword。二、添加登录验证代码在主程序的App类的InitInstance函数体内的最前面加上如下代码(这里为BOOL CGeoDemoApp::InitInstance()函数):...原创 2018-11-10 16:26:08 · 6920 阅读 · 2 评论 -
斐波那契数列两种算法的时间复杂度
关于斐波那契数列的简介: 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学...转载 2019-10-09 16:48:01 · 4627 阅读 · 0 评论 -
VC++6.0 MFC中CString与int、double、float等数据互相转化
C++中doulbe/float/int转为CString的方法在MFC程序中,可以使用Format方法方便的实现int、float和double等数字类型转换为CString字符串。以下是CString的Format支持的格式说明:C++表达方式 数据类型 %c 单个字符 %d 十进制整数(int) %ld 十进制整...原创 2018-11-19 00:12:44 · 7108 阅读 · 0 评论 -
VC++6.0安装番茄助手Visual Assist X和VC6LineNumberAddin的方法
Visual Assist X是一款非常好的Microsoft Visual Studio插件,它可以完全集成到您的Microsoft开发环境中,升级了您的IDE,在不改变编程习惯的同时就可以感受到Visual Assist X为您带来的好处。VC6LineNumberAddin是一款用于显示行号的插件。1、以管理员方式运行cmd,输入注册信息(安装版应该会自动注册DLL的)回车:/...原创 2018-11-13 21:31:57 · 6843 阅读 · 3 评论 -
CString成员函数详解
CString的构造函数1、CString( );CString csStr;2、CString( const CString& stringSrc );CString csStr("ABCDEF中文123456");CString csStr2(csStr);3、CString( TCHAR ch, int nRepeat = 1 );CString cs...转载 2018-11-10 17:52:27 · 465 阅读 · 0 评论 -
MFC ODBC 详细用法
主要内容:MFC ODBC将ODBC API封装在类CDatabase、CRecordSet、CFieldExchange、CRecordView和CDBException中 使用MFC ODBC开发数据库应用程序的一般步骤 使用AppWizard访问数据库 使用类CDatabase连接数据库 使用类CRecordSet打开记录集、获取数据 使用类CRecordSet的函数MoveF...转载 2018-11-10 17:17:33 · 6916 阅读 · 0 评论 -
退出MFC应用程序的方法总结
//1、最常用PostQuitMessage(0);//2、最常用PostMessage(WM_QUIT,0,0);//3、最常用::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);//4、最常用::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);...原创 2018-11-10 16:20:39 · 762 阅读 · 0 评论 -
VC++6.0 MFC使用ODBC链接MySQL把图片写入blob字段
一、创建一个基于对话框的应用程序1、工程取名ODBCPic,删除自动创建的程序对话框资源中默认存在的静态文本控件和两个按钮控件。2、然后在该对话框资源上摆放两个按钮控件,ID(标题)分别为IDC_ADD_DATA(添加数据)、IDC_READ_DATA(读出数据)。3、在FileView里打StdAfx.h里添加头文件#include <afxdb.h>二、添加一个基于...原创 2018-11-04 22:18:48 · 968 阅读 · 0 评论 -
VC++6.0 MFC利用ADO连接到MySQL数据库
安装MySQL数据库,并为其安装驱动!两种连接方式:ODBC连接和非ODBC连接。一、ODBC方式链接1、应用程序的stdafx.h头文件中(也可以在其他合适的地方)包含如下语句。//导入msado15.dll动态链接库,不要命名空间,将EOR改成adoEOR,避免与文件结尾冲突#import "C://program files//common files//system//...原创 2018-11-04 18:14:59 · 3248 阅读 · 0 评论 -
C++字符类型转换(BSTR、_bstr_t、CString、char *、LPCTSTR转换)
1、CString转BSTRBSTR bstr;CString strSql; bstr = strSql.AllocSysString();… SysFreeString(bstrText); // 用完释放 注意:用完之后必须使用SysFreeString 释放!!!2、BSTR转CString//方法一BSTR bstr = ::SysAllocString(L...原创 2018-11-04 17:35:02 · 4782 阅读 · 0 评论 -
VC++6.0 MFC显示模态对话框和非模态对话框
1、模态对话框#include "AddDataDlg.h"//添加头文件CAddDataDlg AddData_Dialog;//在头文件中定义对话框对象(CAddDataDlg为该对话框对应的类)int nReturn = AddData_Dialog.DoModal();//在源文件函数中显示模态对话框,将返回值赋给nReturnif (nReturn ==IDCANCEL)...原创 2018-11-20 20:40:56 · 2094 阅读 · 0 评论 -
基于VS2012的MFC中滑块控件(Slide Control)的使用
滑动控件是MFC中常用的控件之一。它由一个滑动条,一个滑块和可选刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值。通常,在滑动控件附近一定有标签控件或编辑框控件,用于显示相应的值。接下来我们看看简单的用法:1、在对话框添加一个slider滑动块控件,然后给该slider滑动块控件添加一个关联变量m_Slider,如下图所示:2、初始化滑块,在对话框初始化程序里面,添加如下代码...原创 2019-07-15 09:48:14 · 2232 阅读 · 0 评论 -
VC++ 6.0打开或添加工程文件崩溃或无反应
下载所需工具插件filetool.exe :https://download.csdn.net/download/weixin_40026797/109820561、下载得到filetool.exe自解压文件,双击或者右键解压,得到一个文件夹,里面包含filetool的项目文件。2、找到FileTool.dsw文件,双击打开,进入Visual C++ 6.0之后,点击快捷菜单栏中的红色叹号...原创 2019-02-28 23:00:25 · 2215 阅读 · 2 评论 -
MFC实现按ENTER或者ESC不关闭程序
原理很简单,就是将MFC框架中PreTranslateMessage函数和OnOK函数这两个虚函数进行重写,添加想要执行的代码。步骤一:在窗体头文件(.h)中加入:protected: //PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的 virtual BOOL PreTranslateMessage(MSG *...原创 2018-11-28 20:40:07 · 637 阅读 · 0 评论 -
C++ MFC单选按钮Radio简单用法使用
创建单选框Radio ,ID号IDC_RADIO11、获取单选框内容int RadioState = ((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();//返回1表示选上,0表示没选上 2、默认值设置 在初始化中添加((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE)...原创 2018-11-24 22:17:02 · 4253 阅读 · 0 评论 -
VC++6.0 MFC列表控件的基本使用方法
1、添加ListCtrl控件 2、属性中View(样式)设置为Report(报告)3、类向导为列表控件关联变量4、初始化列表:在列表控件所在的对话框类里的OnInitDialog()函数中初始化表头://列表初始化 m_ListData.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//添加网...原创 2018-11-19 20:03:11 · 10502 阅读 · 0 评论 -
VC++6.0 MFC获取当前工作路径和可执行文件路径
1. 获取Debug或Release所在的路径 CString GetModuleDir() { HMODULE module = GetModuleHandle(0); char pFileName[MAX_PATH]; GetModuleFileName(module, pFileName, MAX_PATH); CString csFull...转载 2018-11-21 21:00:19 · 1399 阅读 · 0 评论 -
VC++6.0 MFC将列表控件中内容保存到EXCEL
1、获取工作路径 //获取工作路径 CString GetWorkDir(){ char pFileName[MAX_PATH]; int nPos=GetCurrentDirectory( MAX_PATH, pFileName); CString csFullPath(pFileName); csFullPath+="\\"; if(nPos<0) ...原创 2018-11-21 20:54:57 · 1815 阅读 · 3 评论