自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 多线程---自旋锁、互斥锁区别

何谓自旋锁?它是为为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环

2012-03-26 16:34:41 804

转载 P2P之UDP穿透NAT的原理与实现

论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。首先先介绍一些基本概念:    NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Netw

2012-03-26 16:01:53 446

转载 多线程---队列

对于编写多线程的朋友来说,队列具有天生的互斥性。在队列里面,一个负责添加数据,一个负责处理数据。谁也不妨碍谁,谁也离不开谁。所以,队列具有天生的并行性。只针对:一个线程读,一个线程写。当不满足这个先决条件,多线程也完蛋,也得进队列加锁,出队列加锁view plainprint?#define MAX_NUMBER 1000L  #define STATUS

2012-03-26 15:57:00 810

转载 多线程----volatile

Volatile-Correctness,让编译器帮你检测竞争条件Andrei Alexandrescuye_feng译 并不是我故意想弄糟你的心情,但是在这期专栏里,我们将讨论多线程编程这一话题。正如上一期Generic里所说的,编写异常安全(exception-safe)的程序是非常困难的,但是和编写多线程程序比起来,那简直就是儿戏。多线程的程序是出了名的难编写、难验证、难

2012-03-26 15:52:36 554

转载 多线程----嵌套锁

嵌套锁这个概念,主要是为了根据编程中的一种情形引申出来的。什么情况呢,我们可以具体说明一下。假设你在处理一个公共函数的时候,因为中间涉及公共数据,所以你加了一个锁。但是,有一点比较悲哀。这个公共函数自身也加了一个锁,而且和你加的锁是一样的。所以,除非你的使用的是信号量,要不然你的程序一辈子也获取不了这个锁。view plainprint?HANDLE hLock;    v

2012-03-26 14:44:27 880

转载 多线程---读写锁

在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢?    有,那就是读写锁。    (1)首先,我们定义一下基本的数据结构。view plain

2012-03-26 14:43:45 520

转载 理解WebKit和Chromium: WebGL及其实现

# WebGL及在WebKit和Chromium中的实现## 概述前面章节介绍了Canvas2D,同时也介绍了在canvas中同样也可以绘制3D图形,也就是Canvas3D或者称为WebGL。同Canvas2D不一样的是,WebGL标准草案不是由W3C来起草的,而是Khronos组织来负责的,目前很多浏览器支持WebGL,例如Firefox, Chrome, Safari(仅限Ma

2012-03-21 23:45:20 1701

转载 理解WebKit和Chromium: Canvas2D及其实现

# Canvas 2D及其在WebKit和Chromium中的实现## 概述Canvas是HTML5新引入的元素,它是一个画布。开发者可以用JavaScript脚本在该元素上绘制任意图形(2D或者3D)。Canvas元素有两个属性“width”和“height”,用来设置画布的宽度和高度。Canvas本身来讲并没有定义绘制图形的动作和行为,只是提供了一个获取绘图的上下文(conte

2012-03-21 23:44:55 1281

转载 理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍

在介绍本系列各个专题之前,有必要先解释一下极其容易混淆的几个概念,它们是WebKit,WebKit2,Chromium和Chrome。首先来了解WebKit。广义上来说,WebKit是一个开源的项目,其前身是来源于KDE的KHTML和KJS。该项目专注于网页内容的展示,开发出一流的网页渲染引擎。它不是浏览器,而且也不想成为浏览器。 该项目包含两个部分,第一是WebCore,其中包含了对HT

2012-03-21 23:44:30 881

转载 理解WebKit和Chromium: Chromium硬件加速合成

# Chromium硬件加速合成(hardwareaccelerated compositing)## 概述在介绍硬件加速合成之前,让我们先大概了解一下基本的做法是如何渲染生成网页内容的。一个网页通常可以包含很多层,这个我们在WebKit渲染基础中讲过,例如有透明效果的节点, Canvas节点等,这些节点都可以是页面中的一层,这些层的内容最后组成一个可视化的网页内容,如下图

2012-03-21 23:43:50 2110 2

转载 理解WebKit和Chromium: WebKit渲染基础

# WebKit渲染基础## 概述WebKit是一个引擎,而不是一个浏览器,它专注于网页内容展示,其中渲染是其中核心的部分之一。本章着重于对渲染部分的基础进行一定程度的了解和认识,主要理解基于DOM树来Render树和RenderLayer树的构建由来和方式。那么什么是DOM?简单来说,DOM是对HTML或者XML等文档的一种结构化表示方法,通过这种方式,用户可以通过提供标

2012-03-21 23:42:43 2245

转载 理解WebKit和Chromium: Chromium的GPU硬件加速

# Chromium的GPU硬件加速## 概述这里所说的GPU硬件加速是指应用GPU的图形性能对chromium中的一些图形操作交给GPU来完成,因为GPU是专门为处理图形而设计,所以它在速度和能耗上更有效率。但是,使用GPU加速有些额外开销,并且某些图形操作CPU完成的会更快,因而不是所有的操作都合适交给GPU来做。Chromium中,GPU加速可以不仅应用于3D,而且也

2012-03-21 23:42:18 1103

转载 理解WebKit和Chromium: 插件机制(NPAPI Plugin)

# 插件机制(NPAPI plugin)## 概述Chromium中的NPAPI插件(plugin)来源于mozilla的插件机制。因为它被广泛的应用,很多插件厂商或者开发者基于它编写了数以万计的插件,因而chromium对它也提供了支持,不过chromium有自己独特的插件架构,后面我们会详细介绍。NPAPI提供两组接口,一类以NPP打头,由插件来实现,被浏览器调用,主要

2012-03-21 23:41:48 2316

转载 理解WebKit和Chromium: Chromium界面(UI)

Chromium的界面相当简洁,这是她的设计理念。大体上可以把界面分成两个主要部分:网页内容和外边的修饰控件(例如,tab管理,工具栏,设置按钮等)。整个chromium浏览器是个顶层窗口。每个tab都对应一个顶层窗口的子窗口,每个网页内容都会绘制在一个子窗口中。当然这个是现有的窗口结构,但在新的views框架中,窗口将会被移除,详细的后面有专门介绍。Chromium界面另一个主要

2012-03-21 23:41:19 1231

转载 理解WebKit和Chromium: 前言

这几年来,我阅读了大量的WebKit和Chromium代码并参与开发了相关的浏览器,一个感觉是代码量真的很大,常常看了这块忘了那块;另一个感觉是文档真的很少,特别是WebKit(chromium有不少设计文档,但是还不够)。这让我觉得非常痛苦,常常摸不着头绪。鉴于自己的经历,觉得很有必要把阅读代码后的理解和总结记录下来,一来帮助自己回忆,二来可以分享给其他人。这将会是一个系列,该系列的介绍

2012-03-21 23:40:40 1373

转载 vc Debug 和 Release 编译方式的本质区别

一、Debug 和 Release 编译方式的本质区别  Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。  Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /

2012-03-20 11:27:58 536

转载 UI新技术

1、offscreen render2、webkit 这个大ui引擎

2012-03-20 11:20:10 610

转载 HTML-class与id的区别及应用

class是设置标签的类。id是设置标签的标识。class属性用于指定元素属于何种样式的类。如样式表可以加入:.baobao { color: lime; background: #ff80c0 }使用方法:class="baobao"id属性用于定义一个元素的独特的样式。如一个CSS规则:#binbin { font-size: large

2012-03-18 10:58:07 11839 1

转载 C++的explicit关键字 学习笔记

C++当中的explicit关键字平时用的比较少,但是要想稍深入地学习C++,这个还是必须的。  首先,明确一点,explicit关键字只是用来修饰构造函数的;而且它只会出现在类中的构造函数声明之前。其次,explicit关键字是用来抑制由构造函数定义的隐式转换的。那么我们首先需要知道什么是由构造函数定义的隐式转换?下面的代码演示了这种转换: [cpp]

2012-03-14 13:22:24 652

转载 从java语言看 代理模式和反射原理

代理模式:为其他对象提供一种代理以控制对这个对象的访问。Proxy和RealSubject类共同实现了Subject接口,这样一来,在任何地方使用RealSubject类的地方就可以使用Proxy类来代理。而在真正操作前可以对其进行一些其他操作。静态代理:静态代理即Proxy类为静态的,不能再程序加在到内存时动态的创建。看一下静态代理的时序图。如果Rea

2012-03-14 11:06:19 725

转载 设计模式之 抽象工厂 与 c++反射

设计模式之 抽象工厂 与 c++反射 抽象工厂(工厂方法):的官方解释是:  Define an interface for creating an object, butlet subclasses decide which class to instantiate. Factory Methodlets a class defer instantiation to subc

2012-03-14 11:04:15 2488

转载 C++实现 反射 机制( 即根据 类名 创建 类实例)Create C++ Object Dynamically

Create C++ Object DynamicallyIntroductionC++不像C#和Java那样具有反射的能力,通常不能根据任意一个class name来创建该class的instance。但我们知道在MFC中,任何继承了CObject的类都可以根据其名字来创建实例,它是使用了一些宏。而我从来就不喜欢使用大把的宏,虽然有的时候宏可能比较方便,可能对某些人来说也更美观。原理

2012-03-14 11:02:13 6059 2

转载 变长度形参---可变参数宏(variadicmacros)传递可变参数表

在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如:#define pr_debug(fmt,arg...) \printk(KERN_DEBUG fmt,##arg)用可变参数宏(variadicmacros)传递可变参数表你可能很熟悉在函数中使用可变参数表,如:void printf(const char* format,…);直到最近,可变参

2012-03-14 10:45:05 1082

转载 访问者模式

访问者模式  访问者模式访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。   定义(源于GoF《Design Pattern》):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。  从定义可以看出结构对象

2012-03-09 20:14:45 391

转载 函数式编程-闭包概念

闭包的基本概念  闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在 Scheme、Common Lisp、Smalltalk、Groovy、

2012-03-09 20:12:45 970

转载 面向对象编程语言中的函数式编程--为命令模式和访问者模式正名

函数式编程和命令式编程 函数式编程是最近被热炒的一个概念。国内外众多大牛纷纷发表文章,认为函数编程可能会再度兴起。搞得一向喜欢跟风的小弟我如坐针毡。因此,也抽空研究了一下函数式编程这个时髦的概念。上个世纪,我曾经在图书馆借了一本介绍所有主要计算机语言的书,那本书简单得介绍过Lisp和其他语言的语法。其中提到,Lisp是一门函数语言。当然,那时对这句话没什么概念。命令式编程是一种用程

2012-03-09 20:11:21 952

转载 事件触发、分发、observer机制----消息总线架构模式(中介者(调停者)设计模式)

传统的observer(事件-监听)机制一般使用 比较直观的一种是使用一种“注册——通知——撤销注册”的形式。但是这种形式可以通过一个纯被观察对象的纯虚接口类实现依赖倒置实现解耦,但是事实还是有一定的耦合,比如对象的生存周期就通过注册和撤销注册耦合了。前言一直以来,都对异步事件很感兴趣,比如一个应用在运行一个耗时的过程时,最好的方式是提交这个耗时的过程给一个专门的工作线程,然后立即

2012-03-09 19:30:59 11374 1

转载 cstring 转 utf8

如果原字符是Unicode编码,使用WideCharToMultiBytes,使用UTF8代码页如果是ansi编码的则先使用MultiBytesToWideChar转换为Unicode编码,再按上述操作完成//把utf8转成unicode,再转成cstring  void ConvertUTF8ToANSI(char* strUTF8,CString &strANSI)  //

2012-03-08 10:56:51 6872

转载 用map实现去重

map内部使用红黑树实现,因此可以实现极为快速的查找。可以利用map键值的惟一性将要去重的对象作为键值插入到map中,插入失败时即为重复值,不过对象要满足“严格弱排序”。一般要对象及对象中的属性对象的“返回值格式:        typedef std::map mapFilter;        mapFilter mapFilterInstance;

2012-03-08 10:06:51 15046

转载 windows选择多文件

下面的代码演示了如何得到GetOpenFileName允许多选的情况下选择的文件名#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){ OPENFILENAME ofn; TCHAR szOpenFileNames[80*MAX

2012-03-06 13:27:28 680

转载 文件描述符

文件描述符求助编辑百科名片  操作系统进程表中存放各个文件进行文件描述内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。目录

2012-03-05 23:03:48 675

转载 linux重定向

(这是理解后面的知识的前提,请务必理解)  a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;  b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor有关;  c、 用   d、 用 > 来改变送出的数据信道(stdout

2012-03-05 23:03:04 345

转载 BOOL和bool的区别

1、类型不同BOOL为int型,微软自定义类型:typedef int   BOOL;bool为布尔型,为C++标准的数据类型2、长度不同bool只有一个字节BOOL长度视实际环境来定,一般可认为是4个字节,因为它本身是int型3、取值不同bool取值false和true,是0和1的区别BOOL取值FALSE和TRUE,是0和非0的区别如果数个bool对象列在一

2012-03-01 10:23:17 453

鼠标手势demo

鼠标手势的demo,支持各种手势,采用vs2005编译测试通过

2012-12-14

空空如也

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

TA关注的人

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