- 博客(330)
- 资源 (59)
- 收藏
- 关注
原创 即插即用型设备驱动的加载过程
现假设驱动程序已被正确安装:1.某种PnP总线驱动发现了即插即用设备的存在:①对于热插拔设备,则发现过程发生于插入设备的瞬间;②如果是非热插拔设备,则发现过程发生于系统启动时2.PnP总线驱动利用即插即用协议询问设备的ID信息设备的ID信息是一个能够唯一标识该设备的字符串,一般格式为:总线类型&厂商ID&产品ID&设备ID&版本号3.PnP总...
2019-08-19 22:07:59
1021
转载 do {...} while (0) 在宏定义中的作用
http://www.cnblogs.com/lanxuezaipiao/p/3535674.html如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。下面就是一个例子: 1 2 ...
2018-12-24 16:40:21
561
转载 264 nal type
/*NUAL HEAD +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+-+ |F|NRI| Type | +---------------+ */F = Forbidden_zero_bit =0;NRI = Nal_ref_idc:表示NAL的优先级。0~3,取值越大,表示当前NAL越重要
2017-02-09 11:28:59
1602
转载 iOS ViewController点击空白处收起键盘
点击ViewController空白处时收起键盘,可以通过系统的touchesBegan方法实现,具体如下:Objective-C 版- (void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES];}123123Swift 版
2017-01-03 17:58:48
1025
转载 Objective-C id类型实现原理
在 Objective-C中id类型的对象可以转换为任何一种对象,有点类似与void*指针类型的作用。下面简要介绍一下id类型。 id标志符:通用对象类型。id类型是一个独特的数据类型,可以转换为任何数据类型,即id类型的变量可以存放任何数据类型的对象。这是为什么呢?还是从OC的内部实现机制上来分析吧! 在内部处理上,id类型被定义为指向对象的指针,这可以
2016-12-30 15:55:27
690
转载 H264中I帧和IDR帧的区别
IDR(Instantaneous Decoding Refresh)--即时解码刷新。 I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能
2016-11-04 15:59:13
1116
转载 I,P,B帧和PTS,DTS的关系
基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图
2016-10-25 20:09:17
518
转载 abstract interface区别
在Java语言中,abstract class和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的
2015-10-13 22:21:36
709
转载 prefast 使用
1. 概述 在前面的安全编码实践的文章里,我们讨论了GS编译选项和数据执行保护DEP功能。 结论是GS和DEP可以有效的缓解缓存溢出类型的安全漏洞的危害。关于这个结论,有两个大家需要值得注意的地方。 第一:GS和DEP是缓解(mitigation)措施。也就是说,代码本身仍然存在着安全漏洞,只是由于GS和DEP降低了其危害程度。 第二:GS和DEP存在其自身
2015-10-03 17:24:17
2832
原创 静态代码块、非静态代码块 区别以及用途
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package extendi
2015-10-01 10:02:57
1846
转载 JRE与JDK的区别
1. 定义JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。JDK(Java Develo
2015-08-21 09:08:09
654
原创 ISP原则
ISP(接口隔离原则)定义:类的胖接口可以分解成多组方法,每组方法都服务于一组不同的客户程序原则:不应该强迫客户依赖于那些他们不使用的方法.理解:ISP是SRP的特殊实现.
2014-10-12 21:45:37
1214
原创 DIP原则
DIP(依赖倒置原则)定义:①高层模块不应该依赖于底层模块,二者都应该依赖于抽象② 抽象不应该依赖于细节,细节应该依赖于抽象启发式规则:①任何变量都不应该持有一个指向具体类的指针或引用②任何类都不应该从具体类派生③任何方法都不应该覆写它的任何基类中已经实现了的方法实现方式:①动态多态性:使用抽象类的多态实现②静态多态性:使用模版实现理解:LSP和DIP是OCP的
2014-10-12 20:52:39
1622
原创 LSP原则
LSP(Liskov替换原则)定义:子类型必须能够替换掉它们的基类型问题:在使用OCP原则时,如果子类无法替换基类,而调用者却默认有这样的假设,造成程序错误的根源.启发式原则: ①派生类中的退化函数.(派生类将基类函数覆盖置空)②派生类抛出异常 注意:这里①只是通用的原则,实际上又是存在这种情况也满足LSP解决办法:提取原来继承体系的公共部分,将原来继承体系中的父子类从
2014-10-12 18:02:08
1386
原创 OCP原则
OCP(开放-封闭原则)定义:软件实体(类,模版,函数等),应该是可以拓展的,但是不可修改的.特征:①对拓展开放,即可以改变模块的功能②对更改封闭,即对模块进行拓展时,不必改动模块原有的代码或二进制方法:创建出固定却能描述一组任意个可能行为的抽象,而模块可以操作这类抽象体.由于模块依赖一个抽象体,因此更改可以是关闭的,同时通过这个抽象体派生,也可以拓展次模块的行为.理解:开放-
2014-10-12 16:59:33
1285
原创 SRP原则
SRP(单一职责原则) 就一个类而言,应该有且仅有一个引起它改变的原因.职责:变化的原因原因:如果一个类承担过多的职责,其中某个职责的变化可能会消弱或者抑制这个类完成其他职责的能力.个人理解:大多时候这个原则要遵循.但是不可能所有类都一成不变的使用这个原则.如果开始就分离职责,可能以后这块的需求没有多大变化,而职责的拆分必然造成不必要的复杂性.以后维护成本增加.初始
2014-10-12 11:16:44
1767
转载 Inside Qt Series (全集)
Inside Qt 系列QObject这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signaland slot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect(…) 方法连接起来,并可以使用 disconnect(…) 方法来断开这种连接,你还可以通过调用blockSignal(…)
2014-07-15 11:06:23
1026
转载 VS2008+QT4.7+VAssistX集成流程
最近完成了VS2008+QT4.7+VAssistV的集成,之前网上很多文章说要对QT4.7.4进行编译,然后配置环境变量等等,照做过后仍然不行,过程之中走了不少弯路,不过功夫不负有心人,最终终于成功!现在记录下来,仅供大家参考!集成流程:第一步:准备安装包Ø VS 2008Ø QT4.7框架:qt-win-opensource-4.7.2-vs2008.exe
2014-07-07 17:47:30
1420
转载 SyntaxError: Non-ASCII character
这是在文本上写的第一个python语句,就是两个简单的print语句,但是都有中文的注释,然后用python命令在DOS命令行中执行python文件的时候,就出现了上面的问题。建议是在www.python.org/peps/pep-0263.html中查找原因,经过大概的浏览,查找到这样的一条解决方法。在文件的第一行加入下面这条命令:# This Python file uses th
2014-06-06 17:50:56
864
转载 深入浅出TCP之send和recv
SO_RCVBUF SO_SNDBUF 先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,
2014-05-27 16:58:36
1015
转载 MediaInfo::Get
Video parameter参数:Count 值:201参数:Status 值:参数:StreamCount 值:1参数:StreamKind 值:Video参数:StreamKind/String 值:Video参数:StreamKindID 值:0参数:StreamKindPos 值:参数:Inform 值:ID
2014-05-26 17:54:51
1738
原创 关于vector删除某一些特定的值的使用方法和出错的问题详解.
关于erase,我的理解就是:删除指定的元素,然后把刚刚删除的元素其后面所有元素往前移.然后改变end指针.使其往前移动一位.最重要的是,当前的迭代器不动(但是由于元素往前移了,所以它指向了原始状态的下一个元素).比如我有一个vector,vector的元素分别是0,1,2,3,4;如果我想删除元素值为3的元素.那么当我使用erase后,它的内存元素分别为0(begin),1,2,4(en
2014-05-03 17:36:06
3510
转载 ffmpeg命令详解
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运
2014-04-09 14:04:02
3208
原创 代码坏味及解决方案(底层重构和设计模式两个方面)
代码坏味道:一、Duplicated Code(重复代码)重构方面:1. 同一个类的两个函数含有相同表达式:采用Extract Method提炼出重复的代码.然后让两者调用被提炼出的那一段代码2. 两个互为兄弟的子类含有相同表达式:① 两者功能几乎相同:先整理相同功能函数(Extract Method),然后使用继承将其推入父类(Pull up Method) ② 两者并非
2014-03-22 22:53:00
1765
转载 curl_easy_setopt完整参数列表
将设置在option选项上的值。对于下面的这些option的可选参数,value应该被设置一个bool类型的值:选项可选value值备注CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置header中的Referer:信息。 CURLOPT_BINARYTR
2014-03-21 18:18:47
5516
转载 linux grep命令
1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。2.格式grep [options]3.主要参数[options]主要参数:-c:只输出匹配行的计数。-I:不区分大 小写(只适用于
2014-02-20 10:24:40
751
转载 windbg dump生成
程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:1) 打开WinDBG并将之Attach 到crash的程序进程2) 输入产生dump 文件的命令 WinDBG产生dump 文件的命令是 .dump ,可以选择不同的参数来生成不同类型的dump文件。
2014-02-13 11:21:22
863
转载 Windows用户态调试器原理
Windows操作系统提供了一组API来支持调试器。 这些API可以分为三类: 创建调试目标的API; 在调试循环中处理调试事件的API. 查看和修改调试目标的API. 接下来将会分别对这三种API进行介绍。 创建调试目标 在调试器工作之前,需要创建调试目标。用户态调试器有两种创建调试目标的方法:一是创建新进程,二是附加到一个运
2014-01-27 15:14:14
1354
原创 opencv 直方图
char* srcimg = "fj.jpg"; char* smoothtitle = "SmmonthImg"; IplImage* psrcImg = cvLoadImage( srcimg ); if( psrcImg == NULL ) return; IplImage* pgray_plane = cvCreateImage( cvGetSize( psrcImg )
2013-12-28 17:21:26
863
原创 图像腐蚀
图像腐蚀其实就是根据锚点来比较左边点,锚点本身,锚点上一个点的大小,取其小.具体可以参考:http://blog.youkuaiyun.com/j3smile/article/details/7183119下面给出一个使用实例:char* srcimg = "fj.jpg"; char* smoothtitle = "SmmonthImg"; IplImage* psrcImg = c
2013-12-21 17:51:07
1111
原创 opencv 将BGR转为HSV
char* srcimg = "fj.jpg"; char* smoothtitle = "SmmonthImg"; //char srcname[]="group_uncheck"; IplImage* pSrcImg = cvLoadImage( srcimg ); if( pSrcImg == NULL ) return; IplImage* pDestImg = cv
2013-12-19 20:18:13
2428
转载 深入剖析TCP协议的send与recv
一、 滑动窗口的概念 TCP数据包的TCP头部有一个window字段,它主要是用来告诉对方自己能接收多大的数据(注意只有TCP包中的数据部分占用这个空间),这个字段在通信双方建立连接时协商确定,并且在通信过程中不断更新,故取名为滑动窗口。有了这个字段,数据发送方就知道自己该不该发送数据,以及该发多少数据了。TCP协议的流量控制正是通过滑动窗口实现,从而保证通信双方的接收缓冲区
2013-12-16 16:53:07
1060
转载 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
今天在调试程序中发现了程序中出现的一个问题,具体如下: 在对话框中新建一个线程worker thread,当用户点击cancel时,通知该线程函数退出,同时用WaitForSingleObject等待该线程结束。但是每当用户点击Cancel后,程序会卡在OnCancel函数中的WaitForSingleObject处,必须要强制结束才能退出。
2013-12-10 11:29:56
2018
转载 系统设备的枚举(DirectShow)
DirectShow 对系统中不可预知性硬件提供了良好的支持,其方法是使用系统枚举,系统枚举的一般过程如下所示:(1)使用CoCreateInstance函数创建系统枚举器组建对象(CLSID为CLSID_SystemDeviceEnum),并获得ICreateDevEnum接口;(2)使用接口方法ICreateDevEnum::CreateClassEnumerator为指定的Fil
2013-12-09 19:34:31
3119
转载 opencv 在指定位置显示图像
如何将利用OpenCV加载的图像显示在窗口位置? VC++中为了加载各种类型的图像,如果自己编,那么工作量很大,因为要面对的图像类型太多了(bmp,jpeg,jpg,gif,tif,ppm,pgm,png,pic等等)。我们不可能也没有必要针对每一种类型编出我们自己的编解码器,更为方便的方式是使用各种工具。一方面可以使用CXImage等类似库;另一方面可以利用OpenCV实现。这里我们讨论如何应用
2013-12-03 20:22:42
5194
原创 opencv 播放进度读取
char in_file[] = "out.avi"; char title[] = "Play Video"; char track[] = "track control"; pCapture = cvCreateFileCapture( in_file ); if( pCapture == NULL ) return; cvNamedWindow( title,CV_WINDOW
2013-11-28 20:28:05
1206
转载 vs2008构建和使用libcurl静态库
1>下载CURL源代码curl-7.26.0.zip 2>用VC2008/2005打开工程curl-7.26.0\lib\libcurl.vcproj,转换下工程并构建,可以直接编译成功!3>新建个控制台工程测试下刚才编译的静态库libcurl.lib,可以在libcurl\curl-7.26.0\docs\examples目录找个简单的使用curl的例子,在这个工程选项Confi
2013-11-12 10:24:25
1908
转载 yamdi
1.命令(cmd进入到yamdi.exe所在文件夹),执行 yamdi -i sample.flv -o sample_with_metadata.flv sample.flv是原视频文件,而sample_with_metadata.flv 是补全完元数据的视频(主要是包含了关键帧信息)2.补全后的元数据主要是包含了关于关键帧的信息,有两个数组,times和filepos
2013-11-11 16:00:04
1957
原创 vim 常用命令
1.移动光标1). Ctrl + f/b 屏幕向下/上移动一页2). 0/home键 移动到这一行的最前面的字符处3). $/End 移动到这一行的最后面的字符处4). G/nG/gg
2013-10-31 17:06:54
766
转载 简述configure、pkg-config、pkg_config_path三者的关系
一、什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一个script,执行时可以传入必要参数告知配置项目。 configure程序它会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置,最终生成编译所需的Makefile文件供程序Make读入使用进而调用相关编译程式(通常调用编译程序都是gcc)来编译
2013-10-25 23:36:24
847
注册表编程应用实例 API 实例 VC
2010-09-24
VC++ 助手 Assist.X 破解版
2010-09-20
tcp-ip详解 卷3 实现 网络编程 VC++
2010-09-09
线程详解 VC++经典讲解
2010-09-05
VC知识库 在线杂志 21
2010-09-04
VC++ 技术内幕 笔记 潘爱民
2010-08-27
VC++ 技术内幕 笔记 潘爱民
2010-08-27
Spy++.chm VC++ 6.0 调试
2010-08-23
VC++库函数 pdf版
2010-08-23
Effective+C++.chm
2011-02-25
VC++ 范例大全 源码
2010-12-14
进程查看器,可以检测到系统运行的进程,以及进程的所属关系
2010-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人