- 博客(350)
- 资源 (2)
- 收藏
- 关注
转载 POSIX线程:条件变量
条件变量是 POSIX 线程结构,可以让您在遇到某些条件时“唤醒”线程。可以将它们看作是一种线程安全的信号发送。如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。了解
2013-01-04 22:30:41 351
转载 struct tm 和 time_t 时间和日期的使用方法(转)
关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。下面主要介绍在C/C++中时间和日期的使用方法.通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一
2013-01-04 22:29:08 386
转载 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
一、 强制转型1) C 风格(C-style)强制转型: (T) exdivssion // cast exdivssion to be of type T2) 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T上面两种形式之间没有本质上的不同,它纯粹就是
2013-01-04 22:21:47 248
转载 C++中extern “C”含义深层探索
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显
2013-01-04 22:19:59 262
转载 va_start va_arg va_end 的原理与实例
转自:http://blog.csdn.net/sunboy_2050/article/details/6189072func( Type para1, Type para2, Type para3, ... ) { /****** Step 1 ******/ va_list ap; va_start( ap, para3 ); /
2013-01-04 22:18:54 284
转载 C++ 智能指针
智能指针(Smart Pointer),是一个来用存储指向动态分配(堆)对象指针的类。简单的说,它本身是一个类,这个类是用来存储对象指针。一、智能指针的介绍智能指针,就是具备指针功能同时提供安全内存回收的一个类。它是用一个对象来对指针进行建模,使之具有指针的特性,跟指针具有相同含义的 -> 和 * 操作.并且通过对象的构造函数(获取资源),析构资源(释放资源)来对资源进行管
2013-01-04 22:17:30 306
转载 Windows消息机制VC
在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中,然后由Windows的消息发送程序选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。Windows的消息可分为四种类型: (1)输入消息:对键盘和鼠标输入作反应。这类输入消息
2013-01-04 22:16:16 399
转载 VC++中四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释 1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2互斥量
2013-01-04 22:11:38 330
转载 select,poll,epoll区别
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问
2013-01-04 22:09:35 233
转载 深入分析Windows和Linux动态库应用异同
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。
2013-01-04 22:07:13 313
转载 将 Win32 程序移植到 Linux
首先声明开发环境。Win32程序的开发环境是VS.Net 2008,编程语言是C;Linux使用的RHEL 5.4,GCC的版本是4.1.2,编程语言也是C。然后依次说明移植的对象:数据类型/字符串处理/系统调用/套接字/进程/进程锁/线程/线程锁/信号量/事件锁/条件锁/系统服务。1. 数据类型:在开发过程中,无论哪种平台,只使用最通用的数据类型char,unsigned char,in
2013-01-04 22:05:31 421
转载 Linux多线程Pthread学习小结
来自:http://blog.csdn.net/sunboy_2050/article/details/6063067简介POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程. 作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux和Unix,而
2013-01-04 22:03:39 420
转载 Windows下字体渲染方案
要在Windows平台下渲染字体主要有三种途径:1. 调用Windows SDK提供的图形接口GDI/GDI+。2. 调用DirectX提供的D3DXCreateText或是ID3DXFont的相关接口来实现。3. 用GDI或是其他第三方库(如Freetype)渲染出字形,再调用DX或SDK来绘制图形。这三种方式各自有各的定位,不能简单地来哪个方法好,哪个方法坏
2013-01-04 22:01:34 1849
转载 POSIX线程:API
转自:http://blog.csdn.net/dipperkun/article/details/6312607(一)线程创建与取消 1. 线程创建1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和
2013-01-04 21:59:13 432
转载 如何使用BHO定制你的Internet Explorer浏览器
原文出处:Browser Helper Objects: The Browser the Way You Want It一、简介 有时,你可能需要一个定制版本的浏览器。在这种情况下,你可以自由地把一些新颖但又不标准的特征增加到一个浏览器上。结果,你最终有的只是一个新但不标准的浏览器。Web浏览器控件只是浏览器的分析引擎。这意味着仍然存在若干的与用户接口相关的工作等待你做――增加一个地
2013-01-04 21:54:07 389
转载 各类分析函数调用关系图的工具
下载地点 http://linux.softpedia.com/progDownload/calltree-Download-971.html gprof 2.18.0.20080103 在ubuntu/debian下直接安装即可 http://citeseer.ist.psu.edu/graham82gprof.html kprof
2013-01-04 12:28:34 1556 1
转载 使用第三方开源库是否应该做二次封装
现在有大量的开源第三方库,大家几乎每个项目都有用到。而这些库基本都提供了非常友好的接口,供应用层使用。但是,考虑到版本升级,程序员的水平,甚至使用许可等方面的问题,我考虑对未来大多数要使用的第三方库进行二次封装。下面是我想到的基于多人开发,有可能发布多次升级版本的情况下的优缺点。希望大家参与讨论给出意见。谢谢。优点:1:当自己的软件版本升级时,可能会出现需要更换第三方库的情
2013-01-04 12:28:12 574
转载 分析函数调用关系图(call graph)的几种方法
绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力。不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了。如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具
2013-01-04 00:26:12 3184
转载 VC++中忽略所有默认库纯Win32 API编译及链接
我们在用VC++编写Windows程序的时候可能会发现一般可执行体(.EXE)的文件体积都比较大,于是非常羡慕那些使用Win32汇编编写程 序的人,因为他们编写的可执行文件非常小。其实应用程序的体积是一方面,另外应用程序的部署环境则是需要注意的另一方面,这方面我深有体会,曾经使用 Visual Studio 2008编译过一个C++的Win32程序,本地测试正常,但是部署到客户机时,出现缺少什么动
2013-01-04 00:25:59 440
转载 Finding crash information using the MAP file
IntroductionProgramming neat applications is one thing. But when a user informs you your software has crashed, you know it's best to fix this before adding other features. If you're lucky enough,
2013-01-04 00:25:13 322
转载 利用MAP文件定位程序崩溃代码行
利用MAP文件定位程序崩溃代码行 对于程序员来说,最不希望见到的事情莫过于程序发生了崩溃。 无论是指针越界还是非法操作,都将给我们的应用系统造成巨大的损失。但在一个大型系统的测试过程 中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。我们更为关心的是程序中的哪一行导致了系统崩溃,这样我 们才能有针对性的进行改正
2013-01-04 00:24:25 356
转载 使用MiniDumpWriteDump API 来生成程序的Dump
MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump. 这个dll程序系统中就有, 但是很多软件, 都在自己的安装目录下保存了这个.dll的最新的版本.为了测试这个API, 参考网上一些资料, 写了一个简单的C++ 程序. 目的是当有异常发生的时候, 自动生成Dump文件供之后的分析. 有了Dump文件, 我们就可以使用WinDBG
2013-01-04 00:24:12 560
转载 内存耗尽怎么办?
如果在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。 (1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如:void Func(void){ A *a = new A; if(a == NULL) { return; } …} (2)判断指针是
2013-01-04 00:23:43 609
转载 C++调试堆
内存管理和调试堆 描述堆函数的“Debug”版本。这些函数解决两个最难处理的内存分配问题:改写已分配缓冲区的结尾和内存泄漏(当不再需要分配后未能释放它们)。 调试堆中的块类型 描述在调试堆中内存块所分配到的五种分配类型。出于泄漏检测和状态报告的目的,以不同方式对这些分配类型进行跟踪和报告。 调试堆 提供有关使用调试堆的信息。信息包括:哪些调用用于“Debug”版本,释放内存块时将发生什么,哪些调试
2013-01-04 00:23:25 350
转载 VCPROJ文件详解
http://blog.csdn.net/n567656756765676567/article/details/7333502 vcproj是一个标准的xml文件。因此以下就以节点顺序描述。 大概是分为以下几部分: 工程属性 平台名称 工具文件,好像经常是没内容,不
2013-01-04 00:22:33 619
转载 通过创建MapFile来定位程序崩溃地址
想必大家对于程序莫名其妙的程序崩溃感到苦恼了,但更苦恼的却是没有一个好的方法去解决它。近日,看了这篇的文章,甚有大的收获。现将心得记录下来,以供大家分享。我就直接列出步骤了:1、在图一的Debug Info中,可以选中Program Database for Edit and Continue或按原文中的说法,选择Line Numbers Only,选择此项的好处是会使得应用程序变
2013-01-04 00:21:49 550
转载 Windbg核心调试之dump分析
当系统发生错误是,最常见的就是蓝屏(Bluescreen),这时就会在系统目录下产生一个Dump文件,如MEMORY.DMP。这个文件的主要意义在于分析系统错误发生的原因,以作出解决的方法。 一.Dump文件的产生,意义和类型 当系统发生错误是,最常见的就是蓝屏(Bluescreen),这时就会在系统目录下产生一个Dump文件,如MEMORY.DMP。这个文件的主要意义
2013-01-04 00:21:31 972
转载 解决Windows 程序界面闪烁问题的一些经验
119人阅读 评论(0)收藏举报#pragma data_seg介绍 用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为: #pragma data_seg ("shareddata") HWND sharedwnd=NULL;//共享数据 #pragma data_seg() -------------
2013-01-04 00:21:12 382
转载 调试技巧 —— 如何利用windbg + dump + map分析程序异常
之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.h#include #include //#include
2013-01-04 00:20:49 495
转载 Qt创建窗体的过程
来自:http://blog.csdn.net/tingsking18/article/details/5528666前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法,就是利用Qt Creator这个IDE。带来的好处是:1.
2013-01-04 00:20:24 534
转载 预处理器的预定义宏大全
符合ANSI的预定义宏: __DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。__FILE__:表示当前正在处理的源文件名称。__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。__TI
2013-01-04 00:20:04 509
转载 VS2005调试技巧集合
下面有从浅入深的6个问题,您可以尝试回答一下一个如下的语句for (int i = 0; i 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢?你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次,在哪个地方,怎么才能做到?你希望你的断点在被命中100次后,每命中三次中断一次,比如第103,第106,第109怎样做?你有在调试一个服务程序,希望
2013-01-04 00:19:37 318
转载 在DLL中用CRT静态库申请内存,EXE释放是不行的
因为malloc/free,new/delete都是调用HeapAlloc/HeapFree来实现来实现内存分配是释放的。查看Windows的API可以看到,这两个函数都需要一个Heap的HANDLE做为参数。CRT库采用了全局变量来保存这个HANDLE。如果是CRT静态链接,CRT库的代码会链接到各个DLL中去,也包括这个全局变量。也就是说,每个使用CRT静态链接的dll中都有一个自己的
2013-01-04 00:19:13 679
转载 WINDBG分析DMP方法
上次发了2100蓝屏抓DMP分析案例这个帖子后,好多人想学怎么分析DMP,那我也是刚刚学的,简单的说下。http://bbs.icafe8.com/forum.php?mod=viewthread&tid=399075&fromuid=301231:先下载附件WinDbg,解压出来后,直接运行里面的windbg.exe。(或者可以自已去网上下的) WinDbg.part11.rar (
2013-01-04 00:18:45 510
转载 dump文件生成工具使用介绍
场景:用户的机器上发生了死锁,没有调试环境,怎么快速定位?用户的机器出现了Crash,你的程序没有提供自动捕获dump机制,或者捕获dump失败了?遇到这类问题,开启远程调试成本又太高,最有的信息就是生成dump文件,然后通过dump文件查看callstack等信息定位。Dump文件生成原理:使用windbg调试器包含的dbghelp.dll库函数MiniDumpWriteDu
2013-01-04 00:18:30 595
转载 纯虚函数的使用汇总
http://hi.baidu.com/%C3%E2%B7%D1%B4%F3%BB%B0%D0%F2%C1%D0%BA%C5/blog/item/e8c7c10fc021a1e7aa645729.ht 一、抽象类含有纯虚函数的类被称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承结构的上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类
2013-01-04 00:17:57 455
转载 #pragma data_seg介绍
119人阅读 评论(0)收藏举报#pragma data_seg介绍 用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为: #pragma data_seg ("shareddata") HWND sharedwnd=NULL;//共享数据 #pragma data_seg() ---------------
2013-01-04 00:17:32 261
转载 typedef和typename关键字
1、类型说明typedef类型说明的格式为: typedef 类型 定义名; 类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。定义名表示这个类型的新名字。 例如: 用下面语句定义整型数的新名字: typedef int SIGNED_INT; 使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNED_INT 定义整型变量。例如
2013-01-04 00:17:01 265
转载 关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别名,而不
2013-01-04 00:16:31 203
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人