Windows/C/C++编程
文章平均质量分 95
我是流氓我怕谁啊
未曾清贫难成人
不经打击老天真
自古英雄出炼狱
从来富贵入凡尘!
展开
-
DX渲染学习总结
1. 环境准备1.1. 兼容性1.1.1. 硬件兼容性这里的硬件,指的是显卡及显卡驱动。本身DirectX是一组ring3层和ring0层配合使用的工具组,它需要显卡及显卡驱动的支持,每一个DirectX版本,都需要相关显卡驱动版本的支持。而市面上的显卡及驱动程序,一般都设计成向下兼容,也就是对低版本具有良好的兼容性,DirectX的低版本也可以运行在最新的显卡上。而驱动程序与Windows版本是对应的,因为DX不仅需要显卡硬件特性的支持,同时也需要图形驱动的支持,显卡自身的驱动与操作系统的图形驱动原创 2021-01-19 17:58:16 · 2934 阅读 · 0 评论 -
c++11智能指针std::unique_ptr
智能指针std::unique_ptrstd::unique_ptr1.特性1) 任意时刻unique_ptr只能指向某一个对象,指针销毁时,指向的对象也会被删除(通过内置删除器,通过调用析构函数实现删除对象)2)禁止拷贝和赋值(底层实现拷贝构造函数和复制构造函数 = delete),可以使用std::move()、unique_ptr.reset(…) 转移对象指针控制权。(由1决定,指针发生了拷贝就违反了第一条)2.怎么实现禁止拷贝构造和赋值构造?拷贝构造 和 赋值符‘=’ 对应函数 被删转载 2020-05-13 17:00:40 · 1218 阅读 · 0 评论 -
C++锁的管理-- std::lock_guard和std::unique_lock
前言锁管理遵循RAII习语来处理资源。锁管理器在构造函数中自动绑定它的互斥体,并在析构函数中释放它。这大大减少了死锁的风险,因为运行时会处理互斥体。。锁管理器在C++ 11中有两种:用于简单的std::lock_guard,以及用于高级用例的std::unique_lock。std::lock_guard先来个小例子吧:mutex m;m.lock();sharedVariable= getVar();m.unlock();在这点代码中,互斥体m确保关键部分sharedVariable=转载 2020-05-13 16:53:59 · 535 阅读 · 0 评论 -
gsl::finally{}使用方法
GSL 也提供给了一些有用的工具来帮助创建具有可靠性和可读性的代码。例如 gsl::finally{} API:#define concat1(a,b) a ## b#define concat2(a,b) concat1(a,b)#define ___ concat2(dont_care, COUNTER)#include <gsl/gsl>#include int ma...原创 2020-03-06 09:47:05 · 826 阅读 · 0 评论 -
C++11智能指针:unique_ptr使用简介
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的auto_ptr对象失效,可咋整呢?这个时候就要使用unique_ptr了,顾名思义嘛,unique...转载 2019-11-14 10:50:48 · 250 阅读 · 0 评论 -
C中内存对齐原则
C中内存对齐原则原则:1.结构体内成员按自身按自身长度自对齐。自身长度,如char=1,short=2,int=4,double=8,。所谓自对齐,指的是该成员的起始位置的内存地址必须是它自身长度的整数倍。如int只能以0,4,8这类的地址开始2.结构体的总大小为结构体的有效对齐值的整数倍 结构体的有效对齐值的确定:1)当未明确指定时,以结构体中最长的成员的长度为其有效值2...转载 2018-11-15 17:52:16 · 582 阅读 · 0 评论 -
享誉 C++ 圣经之美名,C++ 之父的经典之作,享誉 C++ 神书之美名
附件为百度网盘下载地址,永久有效。PS:1、全部 PDF 都重新制作了包括小节的书签索引2、画质的清晰度都为高清版3、在 SumatraPDF 中 100% 能打开C++程序设计语言:第1~3部分(原书第4版)_带书签_高清完整版.pdf下载地址: 链接: https://pan.baidu.com/s/1dFaYsyl 密码: nacyC++ 程序设计语言...原创 2018-11-14 17:09:32 · 3991 阅读 · 5 评论 -
共享内存使用方法
大家都知道进程之间的通信可以使用共享内存,但是在具体代码中如何实现呢?下面就介绍下操作原理和我自己的实现代码。在linux下使用的是shmget,shmat,shmdt等函数,所以在网上看到这类的,基本就是在介绍linux环境下的实现,windows下不适用,但可以看其原理。上面结构的定义较为简单,仅为了测试使用。1.我们会创建两个程序,一个称之服务端,一个称之客户端。服务端:...原创 2018-11-16 14:50:58 · 4786 阅读 · 0 评论 -
Code Review解析
什么是代码Review?代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代码实现的质量保证机制为什么不做代码Review?业务需求大,工作时间紧张 项目小,协作的人少,没必要为什么要做代码Review?提高代码质量,提升自身水平 及早发现潜在缺陷与BUG,降低事故成本 促进团队内部知识共享,提高团队整体水平 保证项目组人员的良好沟通 避免开发人...转载 2018-11-28 17:32:35 · 307 阅读 · 0 评论 -
在tcp半开连接(也就是死连接)上send数据, send函数会成功吗? 后续会怎样?
A, B两端tcp建立连接后, 如果中间的交换机断网、断电, 或者B端突然断电, 那么A是无感知的(不考虑心跳机制)。 有些书上喜欢把这种连接叫半开连接, 其实我更愿意叫它为死连接。 此时, 如果A端send一些数据, 会怎样呢? 只要A端的发送内核缓冲区没有满(一般都没满), 那么send函数就是成功返回得, 很显然, 在B端是接收不到数据的。 这再次说明了, send...转载 2018-11-08 15:43:48 · 344 阅读 · 3 评论 -
TCP连接:SYN ACK RST UTG PSH FIN
TCP连接:SYN ACK RST UTG PSH FIN三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是...原创 2018-11-09 16:43:54 · 391 阅读 · 0 评论 -
vs2010 2013 2015+ 必备插件精选
工欲善其事,必先利其器。尽管visual studio本身已经非常强大,但优秀的插件仍然可以帮开发者大大提高效率,以下是牛牛非常喜欢的vs插件。1、Indent Guides绝对是必须的,有了这些辅助线,代码结构一目了然。2、AllMargins 2012不仅仅是Indent Guides的加强版,还提供区块代码预览 3、C# Formatter (针对C#代码的...原创 2018-10-30 10:27:26 · 832 阅读 · 0 评论 -
一款Visual Studio添加背景图片的插件—ClaudiaIDE
ClaudiaIDE在之前的博客中,我们介绍了如何修改VS2015的主题,除此之外,我们还可以添加背景。这需要用到另一款插件—ClaudiaIDE,它提供了单一背景显示,幻灯片播放形式,背景透明度设置,背景显示位置设置等等。如何安装安装过程非常简单,但是为了结构的清晰,还是把它摘出来单独说明下,在VS的扩展和更新界面中搜索ClaudiaIDE,找到后直接安装就可以了。 如...原创 2018-10-29 18:25:50 · 3263 阅读 · 0 评论 -
秒杀多线程第八篇 经典线程同步 信号量Semaphore
前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介绍用信号量Semaphore来解决这个问题。首先也来看看如何使用信号量,信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信号量函数原型:HANDLE CreateSemaphore( LPSECU...转载 2018-09-21 20:14:17 · 203 阅读 · 0 评论 -
秒杀多线程第十篇 生产者消费者问题
继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区...转载 2018-09-21 20:08:35 · 191 阅读 · 0 评论 -
一种基于收看直播数据分发乱序丢包处理方法
最近接到一个关于收看直播数据包乱序处理任务,服务端会一直在轮询发送直播的数据(也可以是升级包数据),附带有包序号和总包数以及每包的长度,各个终端接收直播数据,直到数据全部接收完为止;一般领导安排任务的时候都是三两句话的功夫,程序员可能就需要两三天来实现这个需求,排除大神之外,我们都是再普通不过的程序员了。组长给了一点建议:收看直播在实际场景真正用的时候,下载的文件大小可能很大,然后可能还有...原创 2018-12-21 15:50:11 · 644 阅读 · 0 评论 -
引用与指针的比较
引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。 int m; int &n = m;n相当于m的别名(绰号),对n的任何操作就是对m的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n既不是m的拷贝,也不是指向m的指针,其实...原创 2019-03-01 15:00:15 · 204 阅读 · 0 评论 -
C++ 快速创建多级文件夹
BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);这个是大多数用户都知道的,但是这个有缺点,只能是一层一层的创建。。。很是麻烦!!下面给大家介绍一个函数:BOOL MakeSureDirectoryPathExists( PCSTR DirPat...转载 2019-06-17 19:56:38 · 1445 阅读 · 0 评论 -
深入浅出之MFC整理-----青铜笔记
VC中的CAboutDlgVC中,CAboutDlg,CDrawApp,CDrawDoc,CDrawView和CMainFrame五个类的关系是怎样的?它们各有什么作用?CAboutDlg 向导自动生成的"关于..."对话框类.相对独立.CDrawApp: CWinApp派生类, 一般用于完成一些程序的初始化过程,类似于C中的 main(....)函数.CDrawD...原创 2014-08-28 15:00:39 · 683 阅读 · 0 评论 -
使用libCurl实现断点下载
关键部分代码如下:#include "curl.h"#pragma comment(lib, "libcurl.lib")size_t CROS_DownloadDlg::getContentLengthFunc(void * ptr, size_t size, size_t nmemb, void * stream){LONGLONG len = 0;int r = ss...原创 2018-10-30 16:19:48 · 812 阅读 · 0 评论 -
走进Visual C++
一 走进Visual C++..................................................................................................................................... 21 理解VC工程............................................原创 2014-08-28 15:28:24 · 2214 阅读 · 0 评论 -
VS2017常用快捷键
Ctrl+E,D ---- 格式化全部代码Ctrl+K,F ---- 格式化选中的代码CTRL + SHIFT + B 生成解决方案CTRL + F7 生成编译CTRL + O 打开文件CTRL + SHIFT + O 打开...原创 2018-08-31 17:15:50 · 1200 阅读 · 0 评论 -
一些VS2010的快捷键以及调试技巧
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。 2.查看一个宏(或变量、函数)的宏定义 把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE...原创 2018-11-19 17:14:25 · 1736 阅读 · 0 评论 -
同步和异步,阻塞与非阻塞的区别
简单点说:阻塞就是干不完不准回来,非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声我们拿最常用的send和recv两个函数来说吧...比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的...转载 2019-03-18 17:33:49 · 196 阅读 · 0 评论 -
UDP主要丢包原因及具体问题分析
转载:https://www.cnblogs.com/Zhaols/p/6105926.html一、主要丢包原因1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。2、发送的包巨大丢包:虽然sen...转载 2019-03-18 09:35:27 · 10989 阅读 · 0 评论 -
开源免费的C/C++网络库(c/c++ sockets library)
(1)ACE庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。http://www.cs.wustl.edu/~schmidt/ACE.html(2)AsioAsio基于Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。开源、免费,支持跨平台。http://think-async.com/(3)POCOPOC...转载 2019-03-15 16:46:00 · 658 阅读 · 0 评论 -
C++ 设计模式
设计模式设计模式(Design Pattern)代表了最佳的实践,在面向对象的编程中被很多老鸟们反复使用。使用设计模式有很多好处:可重用代码 保证代码可靠性 使代码更易被他人理解……毫无疑问,设计模式于己、于人、于系统都是多赢的。《设计模式》之于程序员,就好比《圣经》之于耶稣信徒一样,意义可想而知!设计模式的类型根据《设计模式》参考书,共有 23 种设计模式,这些模式可以分...转载 2019-03-14 14:27:36 · 147 阅读 · 0 评论 -
秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题 在《秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量》中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段、事件、互斥量、信号量进行了总结。有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题。因此本文将对事件和信号量作个试验,看看事件和信号量能...转载 2018-09-21 16:30:42 · 172 阅读 · 1 评论 -
秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Semaphore》...转载 2018-09-07 14:22:22 · 110 阅读 · 0 评论 -
svn基操勿用
1、 所选服务器安装包:VisualSVN-Server-2.1.3.msi、2、 客户端安装包:TortoiseSVN-1.6.2.16344-win32-svn-1.6.2.msi一、服务器的安装: 注意:location :为安装文件位置,Repositories:为管理的代码仓库的...原创 2018-07-24 15:12:10 · 249 阅读 · 0 评论 -
神经网络(深度学习)从入门到精通(放弃)
前言本文主要是学习BP神经网络的一个总结,其本身也是机器学习中比较基础、适合入门的模型。目前本人对于机器学习也还只是入门状态,对于很多名词仍然是一知半解(感觉机器学习中的很多术语本身也是模棱两可的),对于很多公式也是不求甚解,因此这篇文章是尝试用自己的语言和理解来复述所学习到的知识,如果有错误之处还望大牛们不吝斧正。霍金说过每多一个数学公式,就会少一半的读者,因此这里也会尽量少用公式,...原创 2018-07-24 11:10:34 · 46424 阅读 · 25 评论 -
H264视频流直播
这篇应该暂时是FFMPEG系统的收官之作了,要做的事情很简单:把编码得到的(置于MP4容器中的)H264视频流的AVPacket(见系列第3篇:http://www.spirithy.com/2016/11/13/ffmpeg_third/)通过网络发送到另一端,然后另一端通过解码器decode(见系列第2篇,官方示例中的video_decode_example:http://www.spirit...原创 2018-07-24 11:01:31 · 2557 阅读 · 0 评论 -
编码为H264裸流并写文件二
在使用FFMPEG的类库进行编程的过程中,可以直接输出解复用之后的的视频数据码流。只需要在每次调用av_read_frame()之后将得到的视频的AVPacket存为本地文件即可。经试验,在分离MPEG2码流的时候,直接存储AVPacket即可。在分离H.264码流的时候,直接存储AVPacket后的文件可能是不能播放的。如果视音频复用格式是TS(MPEG2 Transp...原创 2018-07-24 10:45:25 · 1040 阅读 · 0 评论 -
编码为H264裸流并写文件一
为什么说是裸流呢,因为这篇只讲到把视频编码后写入文件,得到的是一个后缀应该为“.h264”的文件,只能用PotPlayer等功能强大的播放器才能打开,因为它没有容器信息,需要装在MP4、MKV之类的容器中,才是一个真正的视频文件。但这一篇只讲编码后直接写入文件,以生成一个H264裸流文件。代码是从FFMPEG的2.8版本的官方示例中搬运的:https://ffmpeg.org/doxygen/...原创 2018-07-24 10:43:59 · 4786 阅读 · 3 评论 -
FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
工作上需要这些命令,从雷大神哪里转载来的,记录备忘。这两天研究了FFmpeg发送流媒体的命令,在此简单记录一下以作备忘。1. UDP1.1. 发送H.264裸流至组播地址注:组播地址指的范围是224.0.0.0—239.255.255.255下面命令实现了发送H.264裸流“chunwan.h264”至地址udp://233.233.233.223:6666 ...转载 2018-07-24 10:15:57 · 2759 阅读 · 1 评论 -
下班前整理的C++面试题
C++面试题1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?virtual修饰符会被隐形继承的。private 也被集成,只事派生类没有访问权限而已virtual可加可不加子类的空间里有父类的所有变量(static除外)同一个函数只存在一个实体(inline除外)子类覆盖它的函数不加virtual ,也能实现多态...转载 2018-07-23 17:39:49 · 216 阅读 · 0 评论 -
孙鑫C++学习笔记
孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记Lesson1: Windows程序运行原理及程序编写流程Lesson2:掌握C++基本语法Lesson3: MFC框架程序剖析Lesson4:简单绘图Lesson5:文本编程Lesson6:菜单编程Lesson7:对话框编程Lesson9:定制应用程转载 2015-06-20 15:33:58 · 7522 阅读 · 1 评论 -
局域网qq聊天室
主程序// QQDlg.cpp : 实现文件//#include "stdafx.h"#include "QQ.h"#include "QQDlg.h"#include "afxdialogex.h"#include "Inc.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAbout...原创 2015-06-20 15:44:51 · 785 阅读 · 0 评论 -
IP地址子网掩码
IP地址与子网掩码总结 一、IP地址与网络分类1. IP地址 不同的物理网络技术有不同的编址方式;不同物理网络中的主机,有不同的物理网络地址。网间网技术是将不同物理网络技术统一起来的高层软件技术。网间网技术采用一种全局通用的地址格式,为全网的每一网络和每一主机都分配一个网间网地址,以此屏蔽物理网络地址的差异。IP协议提供一种全网转载 2015-06-21 17:03:17 · 399 阅读 · 0 评论 -
c/c++后台开发面试总结《一》
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网开发公司的主流web后台开发语言,主要框架为mvc模型,如smarty,yaf,升级的PHP7速度较快,对服务器的压力要小很多,在新浪微博已经有应用,对比很明显。2)C/C++开发语言,C语...原创 2018-07-20 10:55:08 · 475 阅读 · 0 评论