自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (38)
  • 收藏
  • 关注

原创 深度探索c++对象模型-04-手动调用虚函数(多态实现原理)

如何手动调用虚函数呢?下面直接看代码一、代码#include <iostream>class Father{public: virtual void Func1() { std::cout << "Fahter::Func1()" << std::endl; } virtual void Func2() { std::cout << "Fahter::Func2()" << std::endl; } virtual

2021-06-29 23:29:26 273 3

原创 设计模式18-观察者模式

观察者模式是一个应用非常广的模式之一,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。下面是观察者的类图接下来看一个示例,代码如下:class observer{public: observer() = default; virtual ~observer(){}

2021-06-27 23:07:36 89

原创 深度探索c++对象模型-03-VPTR在对象空间中的位置

看如下代码:class Test{public: char a; virtual void go() { }};void main(){ Test t; t.a = 'c'; cout << "sizeof(t):" << sizeof(t) << endl; char *ptra = reinterpret_cast<char *>(&t.a); char *ptrobj = reinterpret_cast&lt

2021-06-24 22:33:41 189 2

原创 深度探索c++对象模型-02-this指针调整

先看如下代码class A{public: int a; A() { printf("A::A()的this指针:%p!\n", this); } void funA() { printf("A::funA()的this指针:%p!\n", this); } };class B{public: int b; B() { printf("B::B()的this指针:%p!\n", this); } void funB() { printf(

2021-06-23 00:16:20 207 3

原创 如何使用def创建一个dll

1.选择MFC DLL2.点击完成接下来看看怎么实现写dll.第一步先创建一本接口类,calcbase.h#pragma oncetypedef void * CallBackPara;//回调函数接收的参数typedef void(*pMessageCallback)(char* pMsg, CallBackPara param);//回调函数原型class calcbase{public: calcbase(){}; virtual ~calcbase(){}; //将

2021-06-22 23:02:40 371 1

原创 不使用向导自己搭建一个MFC程序

阅读此文,希望你对windows编程了解一些看下图,我就创建了两个文件:先看结果:接下来看看怎么实现:先看mfc.h:#include <afxwin.h>//应用程序类 class MyApp :public CWinApp{public: virtual BOOL InitInstance() override;};//框架类class MyFrame :public CFrameWnd{ //声明消息映射 DECLARE_MESSAGE_MAP()

2021-06-22 22:14:15 165

原创 深度探索c++对象模型-01-空类的大小、成员函数、成员变量的大小

一、空类大小class A{};void main(){ A a; cout <<"sizeof(a):"<< sizeof(a) << endl; system("pause");}结果:从结果可以看出,空类的大小是1,这是为了空类可以被实例化,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化之后就会拥有独一无二的内存地址。如果没有这一个字节的占位,那么空类就无所谓实例化了,因为实例化的过程就

2021-06-20 13:20:20 323

原创 c++多线程之recursive_mutex

先看一个案例:std::mutex g_mutex;void fun2(){ std::lock_guard<std::mutex> lc(g_mutex); cout << "我是fun2\n"; }void fun1(){ std::lock_guard<std::mutex> lc(g_mutex); cout << "我是fun1\n"; fun2();}void main(){ fun1(); syste

2021-06-18 22:36:37 354

原创 c++多线程之利用RALL技术写一个安全的临界区

CRITICAL_SECTION g_cs;class CMySafeLock{public: CMySafeLock(CRITICAL_SECTION *p) { m_pCS = p; cout << "----------------lock------------------\n"; EnterCriticalSection(m_pCS); } ~CMySafeLock() { LeaveCriticalSection(m_pCS); cout &lt

2021-06-18 21:58:12 432

原创 c++多线程之atomic

原子操作,一般都是指“不可分割的操作”,也就是说这种操作状态要么是完成的,要么是没完成的,不可能出现半完成状态;std::atomic代表原子操作,是一个类模板,其实这个东西用来封装某个类型的值的。注意和互斥量的区分,互斥量的加锁一般都是针对一个代码段(几行代码),而原子操作针对的一般都是一个变量,而不是一个代码段,是无锁的。下面看一个简单的例子,就是共同写一个数字,然后最后访问。int ncount = 0;std::mutex mutex1;void testx(){ clock_t .

2021-06-14 22:42:39 527

原创 c++多线程之shared_future

shared_future也是一个类模板,get的时候是克隆(复制)出一个数据,而不是直接取出,所以能多次get(),下面是例子:void testPromise(std::promise<int> &mypromise, int x){ cout << "我是第一个线程,正在处理数据\n"; int nresult = 0; nresult = x + 10; nresult += 100; nresult -= 1; std::this_thread::s

2021-06-14 21:00:21 1151

原创 c++多线程之future的wait_for

下面是主函数:

2021-06-14 16:35:01 1117

原创 c++多线程之promise

std::promise是一个类模板,能够在某个线程中给它赋值,然后我们可以再其它线程中把这个值取出来。下面是调用下面是完整的代码:void testPromise(std::promise<int> &mypromise, int x){ cout << "x:" << x << endl; int nresult = 0; nresult = x + 10; nresult += 100; nresult -= 1; std

2021-06-14 15:55:43 2581 1

原创 c++多线程之packaged_task

packaged_task是个类模板,用于打包任务,把任务包装起来。它的模板参数是各种调用对象,通过std::packaged_task来把各种可调用对象包装起来,方便将来作为线程入口函数来调用。下面是一个例子:int test(int x){ cout << "Child threadID:" << std::this_thread::get_id() << endl; cout << "X:" << x << endl;

2021-06-14 14:56:03 310

原创 c++多线程之async(),future

std::async()、std::future创建后台任务并返回值。希望线程返回一个结果。std::async()是个函数模板,用来启动一个异步任务,启动这个异步任务之后,它返回一个std::future对象,这个std::future包含线程入口函数返回的结果(线程返回的结果),我们可以调用future的成员函数get()来获取。int test(int x){ cout << "Child threadID:" << std::this_thread::get_id()

2021-06-13 23:50:51 528 1

原创 c++多线程之单例模式为什么懒汉式不安全,以及解决办法

下面先说说为什么它不安全:class JackTang{private: JackTang() { } //不能在析构函数中析构这个静态对象,这是一种错误的做法,虽然会调用,但是一个死递归,正确做法 //是创建一个嵌套析构类(下面的B)。 /*~JackTang() { if (pInstance) { cout << "hello "; delete pInstance;//递归调用 pInstance = NULL; cout

2021-06-13 15:37:35 591 1

原创 c++多线程之release

std::mutex m_utex1;int ncount = 0;void mythread1(){ for (int i = 0; i < 100;i++) { unique_lock<std::mutex> lc(m_utex1); cout << ncount << " "; }}void mythread2(){ for (int i = 0; i < 100; i++) { unique_lock&l.

2021-06-13 00:24:27 431

原创 c++11多线程之使用std::try_to_lock摸鱼

代码如下:结果:从结果看出,当拿不到锁的时候,没有在那里傻傻的等待,而是偷偷摸鱼了19次,这样计算机资源就被我们充分利用起来了。下面说说std::try_to_lock的作用:使用该关键字后,会尝试去锁定m_utex,但如果没有锁定成功,也会立即返回,并不会阻塞在那里。...

2021-06-11 16:41:23 1190 2

原创 c++多线程之死锁

什么是死锁?死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。我们举个例子来描述,如果此时有一个线程A,按照先锁a,再锁b,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。如下图所示:就如图这种情况下,线程A在等待锁b,可是锁b被锁住了,所以此时不能往下进行,需要等待锁b释放,而线程B先是锁住了

2021-06-08 21:26:48 3851 1

原创 c++11之多线程创建方式

函数无参使用一个无参函数创建线程,thread 的构造接受一个参数,即函数名。//编写一个函数作为线程的执行路径void myprint() { cout << "我的线程开始运行" << endl; cout << "我的线程开始运行" << endl; cout << "我的线程开始运行" << endl; cout << "我的线程开始运行" << endl; cout << "

2021-06-06 23:28:18 347

原创 c++多线程传参之意料之外的事

先看代码:class JackTang{public: int number; mutable int x{ 101 }; JackTang(int a) :number(a) { } JackTang(const JackTang &obj) { number = obj.number; ; } ~JackTang() { }};void test1(JackTang &obj){ obj.x = 1111;}void t

2021-06-05 19:12:26 121

原创 list的迭代器可改变真实元素

结果:

2021-06-05 10:55:33 105

原创 c++多线程之detach的坑

坑的来源就是,主线程退出了,子线程还没有结束。然后传递的参数要不失效,要不隐式转化失败等。class JackTang{public: int number; JackTang(int a) :number(a) { cout << "这是构造函数\n"; } JackTang(const JackTang &obj) { number = obj.number; cout << "这是Copy构造函数\n"; } ~JackTang(

2021-06-04 23:38:35 569 1

原创 c++基础之引用

1. 什么是引用  引用不是创建一个新的变量,而是给一个已经定义的变量重新起一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;例如:int main(){ int a = 10; int& b = a; //b就是a的引用 cout << "The address of a is " << &a << endl; cout &lt

2021-06-03 22:52:59 121 3

原创 c++11 线程休眠

std::this_thread::sleep_for(std::chrono::seconds(4)); //休眠4秒std::this_thread::sleep_for(std::chrono:: milliseconds (150)); //休眠150毫秒

2021-06-02 09:53:30 695 1

套接字编程之聊天小工具

套接字编程,开发了一个小demo,里面有源码,然后有release版本与debug版本,都可以直接使用,希望对初学者有用。

2020-07-11

pdf转word工具

里面是一个安装包,安装之后可以用,自己用过几次,觉得还不错,大家可以试一试,最近下载东西比较多,比较费积分,故赚点积分,望理解。

2020-07-07

msxml安装包

开发当中经常提示少一些库,查了很多资料找到终于知道是什么原因,是msxml没有装,本人使用的是vs2013.

2020-07-07

局域网扫描工具.zip

搜索整个局域网中所有在线的IP,在工作中经常使用,所以推介一下,希望对给位同学有所帮助。真的挺好用的。

2020-07-07

MFC之自绘ClistCtrl列表控件

开发环境:VS2013 框架:MFC、vc++ 功能:点击列表头排序、隔行换色、高亮显示选中、多行选中

2020-04-20

图片处理工具(各种大小)

不管你是开发或者其他人员,其实这款工具真的特别好用,界面酷炫,功能强悍,可以说是一个小“ps”也不为过。生活中的证件照尺寸等也都有。

2020-04-19

C#对FreeImage的使用

支持GPG,jp2,bmp等二十多种图片的转换,很是方便,啦啦啦啦啦啦啦啦啦啦啦啦啦啦;;;;;啦啦啦啦啦

2020-04-11

FreeImage库,C++,C#测试通过

支持c++,C#,这两个已经经过测试, 库很小就5M,在格式转换非常方便,推介使用。

2020-04-11

图的遍历

包含图的存储、深度优先遍历、广度优先遍历、只需把文件加载到工程文件,编译即可运行,代码值得思考

2020-02-27

手动构造一个哈希表

哈希表的实现,里面包含二叉排序树,及其自己实现的哈希结构,纯代码,代码结构的排布值得思考。

2020-02-27

mysql+connetcot.txt

包含数据库和连接串,对于操作数据库及其连接,亲自测试没有任何问题,版本是5.7.17.msi,其中连接器有32位和64位两个版本,自己根据需要安装

2019-12-29

C++面向对象高级开发:

C++面向对象高级开发,适合进阶。提升,候老师所讲嘿嘿

2019-10-31

c++ 内存管理

c++ 内存管理,候老师讲的,很棒的资源,适合提高进阶

2019-10-31

stl泛型编程--视频教程,讲的比较细

stl 泛型编程课程,值得学习,是百度网盘方式获取,,

2019-10-31

MySkinTy.zip

有三种皮肤,个人觉得像office2007的风格,挺好看的,里面带有使用说明,使用非常简单,亲测是vs2013,vc6,

2019-09-03

TyUSBCamera.zip

使用openCV 实现打开本地摄像头,和usb 摄像头,开发环境是visual studio ,

2019-08-13

执行数据库脚本工具

通过ADO连接方式,能够执行数据库的脚本,比如创建数据库,或者表,方式是通过读取.sql本地文件。

2019-04-29

vc++ MFC 将list控件导入excel

vc++ MFC 将list控件导入excel,已经封装好了,直接可以用,

2019-03-09

很好用的像素尺子

这是一个可以在Windows下运行的像素尺,方便开发人员进行像素宽度的测量

2019-03-09

C++MD5加密的使用

是一个做好的Demon,里面介绍了加密算法的基本使用,可为初学者提供一些帮助

2019-01-16

excel操作库最新版libxl-4.2,包含key

excel操作库最新版libxl-4.2,包含key.自测通过!

2024-02-17

Doxygen、Graphviz

配套的工具都有

2023-07-23

崩溃调试库,64位,因为要大于11个字,我就随便写点

真的很好用,库都是编译好的

2023-05-14

windbg 64 位 因为要10个字,所以多打一点

windbg 64 位

2023-05-14

好用的cJSON库,测试通过-64位

该cJSON库,通过VS2019编译而成,属于64位静态库

2022-12-18

基于Modbus-RTU的温湿度采集demo

基于Modbus_RTU的温湿度采集demo

2022-10-20

libmodbus库与资料亲测通过

这是64位版本的库,分为debug和release,亲测没有问题,另外还有一些资料,希望能帮到你

2022-10-20

合并excel的方法(工具)

可以将多个excel文件合并到一个excel文件中,非常好用,欢迎学习

2022-05-29

gvim80-586.rar工具

vim文本编辑器

2022-01-01

debug.exe 调试工具

debug.exe工具

2022-01-01

DOSBOX windows7、win10

DOSBOX windows7、win10

2022-01-01

TestLib01.rar

静态库和动态库的建立及其使用

2021-10-30

TyProject0622.zip

MFC创建dll

2021-06-22

AccessPort111.zip

这是一个串口工具,非常好用

2021-05-26

Ini配置文件读写.zip

配置文件源码

2021-04-06

CTestPro.zip

CPtrList使用方法,是VS2015写的

2021-03-24

共享内存实现,MFC,C++,VS2015

里面有两个程序,启动之后都可以接收发送消息,但是需要先启动带创建共享内存提示的那个。

2021-03-19

谷歌日志库glog,编译通过

谷歌日志库glog,编译通过

2020-12-23

glog编译好的库(dll,lib,h)

glog编译好的.lib、.dll、 .h文件

2020-12-22

Project3内存检测.rar

仅仅一个例子,里面有使用的方法,编译环境是VS2013,测试通过,可以定位。最近下载东西比较多,赚点积分,设置了2分,不过分吧。

2020-07-25

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

TA关注的人

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