- 博客(108)
- 收藏
- 关注
转载 线程终止方式pthread_cleanup_push
线程终止方式一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正 常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。线程终止时的清理不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行
2011-11-16 17:26:43
775
转载 Posix 多线程编程—线程基础
一.什么是线程 在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的一个控制序列”。典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。二.线程的优点(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代码。
2011-11-16 16:59:55
696
转载 Linux 多线程,基本概念
原文:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138453.html1、Linux多线程,基本概念说明:以下内容,根据参考中【1~6】内容整理而得。一、基本概念1、线程是计算机中独立运行的最小单位。进程是分配资源的单位。2、为什么使用多线程?(1)启动一个新的进程必须分配给它独立的地址空间,建立
2011-11-15 15:36:13
1374
原创 code::blocks 使用Pthread库
1.要在源码中添加#include 2.Project->Build Options->选择你的工程->Linker Settings->Link Library加入pthread(就是在弹出的对话框里输入这个字符串pthread,没有l)就相当于命令行参数中加了-lpthread
2011-11-15 10:20:18
4467
转载 特殊数据类型成员变量的初始化
原文:http://patmusing.blog.163.com/blog/static/13583496020101814811570/有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a. 常量型成员变量b. 引用型成员变量c. 静态成员变量d. 整型静态常
2011-11-12 21:43:38
666
转载 拷贝构造函数及其参数类型
原文:http://patmusing.blog.163.com/blog/static/1358349602010182232781/拷贝构造函数的参数类型必须是引用,而且通常情况下还是const的,但是const并不是严格必须的。#include #include using namespace std; class CClass{public:
2011-11-12 21:41:11
966
转载 使用auto_ptr需要注意的事项
原文:http://patmusing.blog.163.com/blog/static/13583496020101824541270/a. auto_ptr定义于头文件memory中; b. auto_ptr只能用来管理单个动态创建的对象,而不能管理动态创建的数组; c.和其他copy和assign不同,auto_ptr的copy和assign会改变右边的操作数,a
2011-11-12 21:38:05
610
转载 动态分配资源的自动释放 – auto_ptr的实现原理
原文:http://patmusing.blog.163.com/blog/static/13583496020101824142699/动态分配资源的自动释放的英文是 Resource Allocation In Initialization,通常缩写成RAII。根据《C++ Primer》第4版:“During stack unwinding, the function c
2011-11-12 21:34:48
590
转载 关于函数返回值的几种情况
引用:http://patmusing.blog.163.com/blog/static/13583496020113191407531/在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。 1. 如果返回一个基本类型的变量,比如:int a;a = 5;return a; 那么就会a的一个
2011-11-12 21:31:00
650
转载 关于内存对其问题(三)
http://patmusing.blog.163.com/blog/static/135834960201001432528600/第一种情况:struct BBB{ long num; // 4bytes char *name; // 4 bytes
2011-11-12 20:56:56
442
转载 关于内存对齐问题(二)
http://patmusing.blog.163.com/blog/static/135834960201001432110804一个类的对象到底有多大?其大小由什么因素影响?我们假定这个类没有继承任何其他类,且没有虚函数。先看下面例子: #include using namespace std; class Concrete{public:
2011-11-12 20:54:57
459
转载 关于内存对齐问题(一)
http://patmusing.blog.163.com/blog/static/13583496020100143952257/a. 基本类型:所有的基本类型都有相应的对齐参数,编译器在编译时,会用全局的对齐参数和当前类型的对齐参数中较小的一个进行对齐。比如,编译时指定暗8bytes对齐(用#pragma pack(8)实现之),可是由于一个char变量的大小为一个byte,所
2011-11-12 20:51:34
483
转载 理解左值与右值
左值和右值这两个概念我想大家都耳熟能详了,但它们究竟是什么以及如何理解它运用它,一开始大家都会感觉比较困难。所以我想写这篇总结性的文章来帮助大家理解它们。希望对大家有帮助。 首先我们需要理解左值和右值的定义:左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以做为一个左值。 右值指的是引用了一
2011-11-12 20:45:36
1192
转载 内核printf源代码分析
原文:http://blog.chinaunix.net/space.php?uid=268349&do=blog&id=2453286打开Source Insight来阅读EduOS的源代码,我们在stdio.c里找到了printf的实现代码.首先看看对printf的定义:[code]int printf (const char *cntrl_string, ...)[/code
2011-11-10 15:39:54
807
转载 可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在
2011-11-09 14:05:28
1258
转载 OGRE的安装和编译【转+改】
原文:http://www.cnblogs.com/ShaneZhang/archive/2011/07/05/2098455.html一直就想深入了解下游戏引擎内幕。很早就听说过著名的开源游戏图像引擎OGRE。今日有空决定装来玩玩。但是对于软件工程还有VS2010很不了解的我而言,无论是编译还是配置,都如天书一般,还好有高人指点。才得以安装成功。编译及运行环境:Windows 7 、
2011-11-05 14:16:40
575
转载 Ogre1.7.2 + CEGUI0.7.5配置
http://blog.csdn.net/zhanghua1816/article/details/6650509鉴于现在很多朋友开始学习研究Ogre或者CEGUI,不过很多朋友对如何配置这两个环境有很多问题,所以我把配置方法在此简单介绍一下,希望对大家有用,分享是一种快乐,大家共同进步嘛~~~。我这里的这种方法可能不是最简单的配置方法,但是我相信这种配置方法或许对你更有用,让你更
2011-11-05 10:58:01
602
转载 第十章 围绕p()与(*p)()的争论
对于一个函数:void func(void);我们通常可以定义一个这样的函数指针指向它:void (*p)(void) = func;通过p调用func时,通常有两种写法:p();或者(*p)(); 围绕这两种写法,当初C89制定的时候曾经有过争论。(*p)();是一种旧式的规定,旧式规定圆括号左边必须具有“函数”类型,如果是指向函数的指针,那么必须加上*声明符。但C89不
2011-11-03 21:15:50
477
转载 第九章 指针与const
const一词是英文constant的缩写,设立这个关键字的本意,是希望让它所修饰的对象成为一个常量。记得在国家间的外交中,有一个经常用到的术语:“从事与身份不符的活动”,这个const恰恰也正从事着这样的活动,呵呵。C语言可以有三种方法定义一个常量:#define、const和枚举,但只有枚举才是真正的常量,什么是真正的常量?真正的常量是没有存储空间的,是一个右值,这意味着通过任何合法的手段也不
2011-11-03 21:15:29
547
转载 第八章 右左法则----复杂指针解析
上一章费那么多唇舌讨论C语言的声明,其实目的都是为了这一章,期望读者通过对C语言声明形式的详细了解,树立声明嵌套的观念,因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,
2011-11-03 21:13:48
470
转载 第七章 C语言声明详解
人们常说,C语言的声明太复杂了,的确,这也是C语言饱受批评的地方之一。不过,笔者认为,真正要受到批评的不是语言本身,而是那些传播者。传播者们通常都有一个共识:讲述要由浅入深。作为原则,笔者并非要反对它,毕竟笔者对C语言的学习,也经历了相同的过程。但是,由浅入深并不意味着一切从简,以偏盖全。计算机语言不同于数学理论(虽然它的确根植于数学,与数学密不可分),数学理论是一种循序渐进的过程,后面的理论以前
2011-11-03 21:13:21
489
转载 第六章 “另类”数组
动态数组与字符串常量可算是两种“另类”数组。 VLA可变长数组并不为C89所支持,C99才开始支持VLA。但如果想在只支持C89的编译环境中使用VLA的话,怎么办呢?我们可以用动态数组来“模拟”,动态数组在矩阵的运算中很常见,常用来向函数传递一个大小可变的矩阵。动态数组的原理,是利用一块或多块动态分配的内存存储各维的首地址,这样就可以p[i][j]的形式访问数组的数据了。但是,动
2011-11-03 21:12:54
536
转载 第五章 指向数组的指针
讲到第五章了,数组两个字还离不开我们的左右,数组的内容也真多,另一方面也因为数组与指针的关系的确非常密切。 通常,对于int a[8][9]这个二维数组,我们可以这样定义一个指向它的指针:int (*p)[9];这个声明的形式跟人们所熟悉的int *p的形式大相庭径,初学者通常会感到迷惑,不理解的地方大致有四个:1。为什么会以这种形式声明?2。(*p)应该如何理解
2011-11-03 21:12:30
526
转载 第四章 [ ]运算符的本质
数组是存在于人们头脑中的一个逻辑概念,而编译器其实并不知道有数组这个东西,它所知道的,只是[]运算符,当遇到[]运算符的时候,编译器只是简单地把它转换为类似*(*(a+i)+j)这样的等价表达式,之所以是这种表达式,如前几章所述,是因为C语言的数组实现本质上是数组的嵌套。 由于这种等价关系的存在,会产生一些古零精怪的表达式,例如:10[a]这个表达式初看上去让人摸不着头脑
2011-11-03 21:11:17
483
转载 第三章 数组的解剖学
原文:http://blog.csdn.net/megaboy/article/details/482780这一章我们来讨论一下数组的内涵,对数组的内部构造进行一次解剖,看看里面究竟隐藏了什么秘密。 有了前面两章对数组名和C语言数组本质的澄清,再来理解这一章的内容,就容易多了。 在下面的叙述中,笔者会用到一个运算符sizeof,由于在不同的编译器和编译模式下,对一个地址进
2011-11-03 21:10:39
418
转载 第二章 再一次吃惊----数组的数组与多维数组的区别
原文:http://blog.csdn.net/megaboy/article/details/482781看见这个题目,也许有些人就会嘀咕了:难道两者不是一样的吗?C语言的多维数组不就是数组的数组吗?不!两者是有区别的,而且还不小呢。首先看看两者的共同点:1。内存映象一样。2。数组引用方式一样,都是“数组名[下标][下标]........”。3。数组名都是数组的首地址,都是一
2011-11-03 21:09:28
805
转载 第一章 什么是数组名?----一个让你吃惊的事实!
引用:http://blog.csdn.net/megaboy/article/details/482782 数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字:“一维数组是一级指针”“二维数组是二级指针”“数组名可以作为指针使用”“数组名就是..........的常量指针”“数组名就是.........
2011-11-03 21:08:03
638
转载 c++const成员函数
一些成员函数改变对象,一些成员函数不改变对象。 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变 Point对象: void Point:: SetPt (int x, int y) { xVal=x; yVal=
2011-11-02 16:03:51
536
转载 gtk对象系统与c++对象系统的综合比较、gobject对象系统、gobject的对象属性
[gtk对象系统与c++对象系统的综合比较]http://blog.csai.cn/user1/265/archives/2006/3301.html[gobject对象系统]http://www.ibm.com/developerworks/cn/linux/l-gobject/index.htmlhttp://blog.chinaunix.net/u2/60303/showar
2011-11-02 14:09:41
819
转载 32位/64位机上常用数据类型字节数
可用如sizeof(char),sizeof(char*)等得出32位编译器char :1个字节char*(即指针变量):4个字节(32位的寻址空间是2^32,即32个bit,也就是4个字节。同理64位编译器)short int : 2个字节int: 4个字节unsigned int : 4个字节float: 4个字节double: 8个字节long:
2011-10-31 16:37:08
1050
转载 多重继承及虚继承中对象内存的分布
原文:http://www.tbdata.org/archives/878这篇文章主要讲解G++编译器中虚继承的对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。问题拿捏得十分到位,下面是我对原文的翻译,原文见这里(By Edsko de Vries, January 2006)。本文是介绍C
2011-10-31 16:34:54
585
转载 公有继承、保护继承和私有继承
原文:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派
2011-10-28 15:46:04
896
转载 C++函数返回引用
舉一個簡單的例子int & B(int &n){n++;return n;}int main(){int a = 10;int & b = B(a); // 調用 B, 傳遞的是 a 的引用// 到了 B 裏, n 就是指 a,// return n; 就相當是 return a;// 返回到 b 的就是 a 的引用, b 就是 a// 對 n
2011-10-28 15:29:49
911
转载 强制修改const char*类型的数据
原文:http://blog.csdn.net/btwsmile/article/details/6772672C++是一门类型安全(type-safe)的编程语言,它对类型的检查是十分严格的。一个const char*类型的数据是不允许被修改的,如果程序违反了这条规定,编译器将毫不留情地提示错误,不让通过。作为程序员,须知道这样的限制是很有实际意义的,毕竟大多数情况下我们需要类型安全的代
2011-10-28 14:16:21
3776
转载 初步认识dll,在VS2010平台上创建并使用dll
原文:http://blog.csdn.net/btwsmile/article/details/6676802一、为什么需要dll代码复用是提高软件开发的重要途径。一般而言,只要某部分代码具有通用性,就可以将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的情况是各类应用程序框架,如ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给
2011-10-28 14:13:28
881
转载 也谈C++内存区域
众所周知,C++内存区域被分为5大类:栈、堆、自由存储区、全局/静态存储区、常量存储区。 栈由编译器控制,栈空间的申请、使用和释放全权由编译器处理。这里的“全权处理”意思是责任归属,并不是说编译器在程序运行时介入管理。实际上,编译器的工作在编译期就完成了,它对栈的管理体现在编译时对寄存器esp的维护上。 堆即程序员使用new和delete操作符进行管理的内存区域。对堆的访问往往
2011-10-28 14:07:19
1182
转载 浅谈构造函数与析构函数的调用顺序
构造函数 先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下:1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。2.成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表
2011-10-28 13:32:50
25943
转载 C++中 Static作用和使用方法
C++中Static作用和使用方法1、什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至
2011-10-28 10:02:18
4040
转载 怎么计算c++中各个数据类型的取值范围
在c++中,我们都知道各个数据类型的值都有各自所能表达的范围,举个例子来说吧,我们以整型变量int为例说明怎样去计算数据类型的取值范围:我们假设int在vc++开发环境中占用两个字节的单元,这只是为了简化过程的,事实上我们都知道它占四个字节的。从二进制的原码说起:如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为111111
2011-10-27 16:44:18
1916
转载 memset函数不能给int(整型)数组初始化赋值
如下demo是可以的,能把数组中的元素值都设置成字符1,#include #include using namespace std;int main(){ char a[5]; memset(a,'1',5); for(int i = 0;i cout "; system("pause"); return 0;
2011-10-27 15:55:09
5288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人