自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 C++ 常见崩溃问题分析

一、前言从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序; 由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用; 二、C++ 

2015-02-28 18:42:12 1236

转载 C++多线程安全类的问题

我们是多么渴望各种C++类都是多线程安全的,然而一旦涉及到对象间的交互,这样的渴望可能就只能是奢望了。下面,我们以设计一个双向链结点为例,看看要使其多线程安全将会带来一些什么问题。class DoublyLinedNode{       DoublyLinedNode* pPrevNode_;       DoublyLinedNode* pNextNode_; public:

2015-02-28 18:22:59 6173

转载 如何编写线程安全的DLL

在我的工作中经常会编写DLL,这些DLL有个共同的特点就是都有一个初始化函数,一个资源释放函数,其他几个函数都是核心功能函数。而且这些DLL有时会被多个进程同时调用,这就牵扯到多进程的多线程调用DLL的问题。有点绕口,以下我根据我实践中遇到的问题,分四种情况分享一下我解决此类问题的经验:1、动态库只有一个导出函数。这种情况非常少,也是最容易处理的情况。这种情况下编写函数时,只需要考

2015-02-28 18:05:50 481

转载 DLL入门浅析 - 多进程加载DLL内存模型

DLL入门浅析(5)——使用DLL在进程间共享数据         在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的,因为所有的进程用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个进程都有了它自己的地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是

2015-02-28 17:52:07 2467

转载 dll和exe的共享节------多进程共享dll/exe全局变量

我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了copy-on-write机制,当有一个实例去修改共享的那个数据区的时候,那么操作系统会另外分配一个内存块,该内存块就是存放这个实例修改的数据,所以并不会影响其他的应用程序实例。那么可

2015-02-28 17:42:56 455

转载 DLL动态链接库的工作原理

"动态链接"这几字指明了DLLs是如何工作的。对于常规的函数库,链接器从中拷贝它需要的所有库函数,并把确切的函数地址传送给调用这些函数的程序。而对于DLLs,函数储存在一个独立的动态链接库文件中。在创建Windows程序时,链接过程并不把DLLs文件链接到程序上。直到程 序运行并调用一个DLLs中的函数时,该程序才要求这个函数的地址。此时Windows才在DLLs中寻找被调用函数,并把它的

2015-02-28 17:28:33 736

原创 xperf - 收集系统事件命令

@echo offecho Press a key when ready to start... pauseecho . echo ...Capturing... echo .xperf -on PROC_THREAD+LOADER+PROFILE+INTERRUPT+DPC+DISPATCHER+CSWITCH -stackwalk Profile+CSwitch

2015-02-27 17:11:29 1048

转载 process_monitor教程汇总

此文收集于网络,我进行了一些整理,分了三个部分如下。第一部分:一个简要的教程微软出品用于监视Windows系统里程序的运行情况,监视内容包括该程序对注册表的读写、对文件的读写、网络的连接、进程和线程的调用情况。可以看出processmonitor是非常强大的一款软件,普通人就不要使用了,这可是电脑高手使用的软件,断线的风筝也谈不上高手,因为process monitor里面的很多专

2015-02-27 16:34:32 37287 2

转载 depends-工具的用法

如何获取所需dll的信息,这就需要使用VC所带的Depends软件,该软件在VC6安装目录下的tools文件夹里面   D:\Microsoft Visual Studio\Common\Tools,直接双击执行,然后打开exe文件即可,它主要有下面几个注意事项:1)所编的软件所需的Dll文件,可以得到相应的Dll路径,版本,属性等。2)窗口分四部分:左上角是Dll信息窗口

2015-02-27 16:10:01 10183

转载 win32-简单建立自己的符号(PDB)服务器

开发团队中,随着版本的增多,用户的增多,修改遗留问题变得异常困难,pdb是个好东西,符号服务器更是个好东西。给自己的开发团队建立一个简单的符号服务器会损失不好,俗话说得好嘛,“磨刀不误砍柴工”。基本需求硬件一台,要求很简单:有操作系统,硬盘足够足够足够大(请注意用了三个足够)工具软件:symstore.exe(Debugging Tools for Windows中带有

2015-02-15 18:16:01 842

转载 Windows数字签名

数字签名(代码签名)流程出处:http://www.cnblogs.com/itech/archive/2011/07/21/2110924.htmlAuthenticode : 这里翻译为数字认证代码。 code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为数字签名。一 数字认证码如果你是软件开发人员,你可能

2015-02-15 11:02:18 815

转载 Google 按图搜索的原理

针对这个问题,请教了算法组的同事,他分享了基本的思路:对于这种图像搜索的算法,一般是三个步骤:1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。2. 将图像特征信息进行编码

2015-02-14 18:56:38 600

转载 C++对象内存模型2

重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。   其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节),而且还有自己的虚函数,自己overwrite父类的虚函数。如子类D中,f()覆盖了

2015-02-14 18:51:16 358

转载 c++虚函数解析

前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。  

2015-02-14 18:42:33 338

转载 C++对象内存模型

这篇文章成为了打开C++对象模型内存布局的一个引子,引发了大家对C++对象的更深层次的讨论。当然,我之前的文章还有很多方面没有涉及,从我个人感觉下来,在谈论虚函数表里,至少有以下这些内容没有涉及:1)有成员变量的情况。2)有重复继承的情况。3)有虚拟继承的情况。4)有钻石型虚拟继承的情况。 这些都是我本篇文章需要向大家说明的东西。所以,这篇文

2015-02-14 18:42:03 487

转载 曾宪华访谈:公司与个人参与iOS开源的心得

本期的开发者访谈嘉宾曾宪华,曾就职于广州多玩信息技术有限公司,也许你不知道的是,多玩是国内少有的拥有多个iOS开源项目的公司(Github主页),而曾宪华(Github ID:xhzengAIB)是其中大部分项目的开发者和维护者。他在Github上面非常活跃,在过去的一年里有超过三分之二的时间每天都会提交代码。今天就让我们来和他聊一聊开源与个人和公司的故事。受访人:曾宪华(Jack),

2015-02-14 08:42:25 1128

转载 多线程同步(C++)event

上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。 第一个 CreateEvent函数功能:创建事件函数原型:HANDLECr

2015-02-12 19:58:33 755

转载 多线程同步 -原子操作 (Interlocked系列函数)

上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显

2015-02-12 14:41:12 1531

转载 多线程同步(C++)C/C++ Runtime函数使用

一 、简单实例(来自codeprojct:http://www.codeproject.com/useritems/MultithreadingTutorial.asp)主线程创建2个线程t1和t2,创建时2个线程就被挂起,后来调用ResumeThread恢复2个线程,是其开始执行,调用WaitForSingleObject等待2个线程执行完,然后推出主线程即结束进程。Runtime函

2015-02-12 11:02:38 1375 1

转载 多线程同步(C++)WIN API

一、 简单实例比较简单的代码,创建10个线程,其中使第4个线程在一创建就挂起,等到其他的线程执行的差不多的时候再使第4个线程恢复执行API" title="多线程(C++)WIN API" style="margin:0px; padding:0px; border:0px; list-style:none">#include stdio.h> API" title="多线程(C+

2015-02-12 10:46:11 476

转载 多线程同步 -(C++)主要函数

一、多线程的概述    进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。  线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数

2015-02-12 10:41:42 665

转载 多线程同步-信号量(深入理解Semaphore)

多线程同步之Semaphore (主要解决生产者消费者问题)一 信标Semaphore信标内核对象用于对资源进行计数。它们与所有内核对象一样,包含一个使用数量,但是它们也包含另外两个带符号的3 2位值,一个是最大资源数量,一个是当前资源数量。最大资源数量用于标识信标能够控制的资源的最大数量,而当前资源数量则用于标识当前可以使用的资源的数量。为了正确地说明这个问题,让我们来看一看

2015-02-11 21:43:47 2327

转载 WaitForSingleObject 和 WaitForMultipleObjects函数 (让线程挂起等待事件)

WaitForSingleObject 和 WaitForMultipleObjects:1.WaitForSingleObject 等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject:  DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMil

2015-02-11 16:09:30 2665

转载 多线程同步-互斥对象(深入理解Mutex)

多线程之线程同步Mutex (功能与Critial Sections相同,但是属于内核对象,访问速度较慢,可以被不同进程调用)一 Mutex    互斥对象(mutex)内核对象能够确保线程拥有对单个资源的互斥访问权。实际上互斥对象是因此而得名的。互斥对象包含一个使用数量,一个线程ID和一个递归计数器。    互斥对象的行为特性与关键代码段相同,但是互斥对象属于内核对象,而关键代码

2015-02-11 15:54:25 3426

转载 多线程同步-临界区(深入理解CRITICAL_SECTION)

深入理解CRITICAL_SECTION临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。本文深入研究临界区的原理,以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序,可以显示所有临界区及其当前状态。

2015-02-10 18:09:05 10312

转载 多线程同步 - 同步方法列表

转自:http://anwj336.blog.163.com/blog/static/89415209201010173049365/线程的同步Critical section(临界区)用来实现“排他性占有”。适用范围是单一进程的各线程之间。它是:·         一个局部性对象,不是一个核心对象。·         快速而有效率。·         不能

2015-02-10 17:16:53 757

转载 stl hash_map详解

0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻

2015-02-10 15:32:43 460

转载 STL源码剖析---红黑树原理

一、红黑树概述     红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。     红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL

2015-02-10 15:23:13 544

转载 STL中的map容器

一、关于map的介绍map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据

2015-02-09 23:01:02 446

转载 STL中map原理解析

map简介 map是STL的一个关联容器(associative container)之一,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自

2015-02-09 14:35:32 2397

转载 STL(简介模板库)

STL = Standard Template Library,标准模板库STL被内建在你的编译系统之内。STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等。在C++标准中,STL被组织为下面的13个头文件:algorithm>、deque>、functional>、iterator>、array>、vector>、list>、、map>、、memory>

2015-02-09 14:26:04 441

转载 vector的成员函数解析

vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问,和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间,vector的优点:1.       可以使用下标访问个别的元素2.      

2015-02-09 13:57:05 345

转载 windows消息分发机制

在TObject类中,有一个Dispatch()方法和一个DefaultHandler()方法,它们都是与消息分发机制相关的。Dispatch()负责将特定的消息分发给合适的消息处理函数。首先它会在对象本身类型的类中寻找该消息的处理函数,如果找到,则调用它;如果没有找到而该类覆盖了TObject的DefaultHandler(),则调用该类的DefaultHandler();如果两者都不存在,则继

2015-02-03 21:35:51 572

转载 深入解析SendMessage、PostMessage

本文将使用C++语言,在MFC框架的配合下给出PostMessage、SendMessage等的使用方式与使用不当造成的后果(讨论均针对自定义的消息进行)。如有什么错误,欢迎指正。 写过Windows程序的同学都知道PostMessage、SendMessage的区别,PostMessage函数调用发送之后,立即返回,不等待消息处理完成。而SendMessage则让调用的线程处于阻塞(BL

2015-02-03 21:18:11 449

转载 SendMessage、PostMessage原理

SendMessage、PostMessage原理本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实

2015-02-03 20:39:35 441

转载 让Visual Studio载入Symbol(pdb)文件

在VC编译工程的编译连接阶段,会产生Symbol文件,也就是常说的 pdb 文件。pdb 的全称为program database,在 MSDN 中的解释为,pdb 文件是一个在编译和链接阶段产生的,包含了类型和调试符号信息的二进制文件。pdb 文件中包含了各个函数的符号表,也是进行 WinDbg 调试必不可少的文件。既然 pdb 文件是给调试器使用的,那么 Visual Studio 调试器

2015-02-03 20:35:04 673

转载 UI线程和windows消息队列机制

操作系统有一个系统消息队列,另外会为每一个UI线程创建一个消息队列。用户操作时,操作系统判断出当前操作是发生在哪个窗体组件对象,生成一条消息,先将其放在系统消息队列中,再分发到创建该组件对象的UI线程的消息队列中。UI线程中需要一个消息循环,不断从它自己的消息队列读取消息,并对取出的消息进行处理。           (猜测,待考证)java中,swing或awt对象包含了一个消息

2015-02-03 20:19:39 782

转载 windows 消息机制、窗口过程与线程间消息传递

按照自己的理解好好整理一遍消息机制windows是一个消息驱动的系统,会有一个总的系统消息的队列,鼠标、键盘等等都会流入到这个队列中,同时会为每个线程维护一个消息队列(注意默认是有GUI调用的线程才有,对于没有GUI或者窗口的线程,只有当在线程内调用get/peek message 才会自动创建一个消息队列),线程是容纳消息队列的基本单元,系统会把属于不同线程的消息投递

2015-02-03 16:44:30 751

WindowsC++高级调试中文版.zip

非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,非常不错讲解系统内核的书籍,

2019-09-25

空空如也

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

TA关注的人

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