自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 服务器两大基本问题

面对五花八门的服务器结构,借用是低级的。了解写服务器基本问题, 沿着这个方向出发来构建, 不会脑子一团浆糊。1. 网络模型及其派发机制。2. 线程间数据交换机制。 (如网络线程, 数据库线程, 逻辑线程数据交换)

2011-09-23 09:23:28 390

原创 win32应用程序占用了你的鼠标?

<br />win32应用程序占用了你的鼠标?<br />没有对window底层有深入的了解, 提供一个简单的模型。 随便写写。<br />应用程序看上去占用了鼠标等输入设备。实际上底层对输入设备的处理,封包成windows消息, 派发给你的应用程序。<br />windows 桌面系统由桌面管理器和桌面管理器管理下的一系列窗口组成。<br />假想这样一个模型。 <br />桌面管理器取得了输入设备的操作信息。 桌面管理器根据如鼠标的位置, 查询窗口树, 取得鼠标落在哪个窗口之上, 取得其窗口句柄, 向窗

2011-03-19 10:43:00 535

原创 struct 与 class

struct 与 class 又一次听struct与class的区别之讨论。。。首先struct与class的区别是对于c++ 而言的,对于c语言没有Abstract Data Type(class)。c++ 语言里关键字struct与class到底有什么区别呢? 答案是基本没有区别。c++ 是c语言的一个超集, 因为兼容c, 保留了关键字struct 的。 没有用关键字“struct”而用“class”来表示Abstract Data Type,只是”class“  能更好的表达Abstract Data

2011-03-16 11:11:00 431

原创 TCP/IP几点小知识

<br />1. TCP UDP有序和无序。<br />   不论TCP还是UDP发送的都是IP包, IP包在网络上传输每次走的线路不尽相同(路由不同, 比较复<br />杂), 产生了先发未必先到的无序情况, 从UDP包(UDP源端口号.UDP目标端口号.UDP长度.UDP校验)<br />的结构显示, UDP在IP层之上做了简单的处理, 并未加入有序机制。而TCP包(系列号 确认号 窗口大<br />小)加入了滑动窗口, 超时重传机制, 在无序的IP层上构建起了一个有序的协议。<br /> <br />

2011-03-11 13:52:00 368

转载 程序员的性格是怎么产生的?

<br /><br />这个问题我思考了很久,今天说说我的想法。<br />     我记得此前的博客提到过,为什么北方人善于团结,善于政治,而南人好独立,善于经商,我分析可能因为远古时代,北方人主要靠狩猎,狩猎单独行动是很难得,因此就需要有完善的组织,合理的分配制度,因此北方人这方面能力强,南方人主要靠捕鱼,捕鱼的人是不喜欢一起捕鱼的,这样互相争抢,鱼对人的杀伤力较小,因此没有团结的必要,我们从这个引子可以看出性格形成和自然环境有很大关系。在比如我们很容易理解,为什么越南丛林的狩猎武器是一种嘴吹的暗器,而

2011-02-09 10:41:00 345

原创 三种函数指针

     在传统c++语言哲学体系下,函数指针地位十分尴尬, 但是随着面对对象编程的发展,函数指针在c++下静态消息(编译期)向动态消息(运行期)转换过程中扮演者重要角色。本文整理一下c++的几种函数指针。    1. 全局函数指针。 //声明int (*)(int)型指针的别名typedef int (*Func)(int); //函数定义int func(int t) { std::cout class Delegate : public std::unary_fun

2010-12-18 16:22:00 361

转载 function/bind的救赎(上) 孟岩

<br />这是那篇C++0X的正文。太长,先写上半部分发了。<br />Function/bind可以是一个很简单的话题,因为它其实不过就是一个泛型的函数指针。但是如果那么来谈,就没意思了,也犯不上写这篇东西。在我看来,这个事情要讲的话,就应该讲透,讲到回调(callback)、代理(delegate)、信号(signal)和消息传递(messaging)的层面,因为它确实是太重要了。这个话题不但与面向对象的核心思想密切相关,而且是面向对象两大流派之间交锋的中心。围绕这个问题的思考和争论,几乎把20年来所

2010-10-11 06:13:00 640

原创 STL 使用的几种风格

<br />STL 使用的几种风格<br />c++ 实在是一门糟糕的语言(不是我说的), 特性之多, 风格之甚, 令人瞠目结舌. 无奈当初选择了这门语言, 那就继<br />续走下去吧。<br />STL 使用当中的几种风格<br />1. 组合。 很常见<br />2. 公有继承。看起来更像一个创造出一个集合<br />3. 私有继承。相较公有继承,通过使用using更改方法访问权限开放出必要的集合方法。<br />使用继承的方法时因为stl集合的命名规范存在继承体系的名称重叠问题。 多级继承时,需要仔

2010-10-07 17:00:00 1072

原创 几种回调机制 3

3. 泛型 (信号槽)    性能:理论上经编译器内联优化,等于直接调用了成员函数, 所以性能和全局函数相同。 实际情              况拿不准。/////////////////////////////////////////////////////////////////enum Event { EVENT_ATMOSPHERE_CHANGE = 0 };////////////////////////////////////////////////////////////////

2010-08-13 08:08:00 358

原创 几种回调机制 2

2. 多态回调 (观察者模式) 性能:相较全局函数,略差。因为都来虚函数表和虚函数指针转换操作。 /////////////////////////////////////////////////////////////////enum Event { EVENT_ATMOSPHERE_CHANGE = 0 };/////////////////////////////////////////////////////////////////class Listener{public:

2010-08-10 18:39:00 316

原创 几种回调机制

几种回调机制:某个执行体调用函数来完成自己的某项功能,这是一般的函数调用。 而回调调用执行体自身完成功能过程中,改变了某些与回调体相关联的状态,事件等等。根据一般函数调用和回调调用, 可以抉择出何时你应该使用它们。下面是几种回调机制。以蝴蝶效应效应为例 蝴蝶效应( The Butterfly Effect)是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨大的连锁反应。这是一种混沌现象。蝴蝶在热带轻轻扇动一下翅膀,遥远的国家就可能造成一场飓风。执行体 蝴蝶扇动一下翅膀每天必须的任务。状态  

2010-08-10 14:33:00 400

原创 树形插件结构

本文是构建一个插件结构。 plugin 目录下 放置各种插件, 模块先枚举插件构建一个插件树, 客户可以动态配置插件的启用情况。 具体代码如下。 水平有限, 之作讨论。 //test#include "../CssVcamCore/Vcam_Core.h"#include "../CssVcamCore/Vcam_Plugin_Parse_Factory.h"#include

2010-05-30 14:37:00 777

原创 服务器负载和安全胡乱一说。

单个服务器模式, 由于用户的并发量的剧增和服务器处理能力的有限, 很容易出现瘫痪现象。必须构建一个负载服务器, 来平衡个个业务处理服务器的并发量。此服务器 与 个个业务处理服务器进行通信, 获取当前个个业务服务器的并发情况。 客户登录负载服务器, 负载服务器传回负担最轻的业务服务器的地址, 客户连接真正的业务服务器。 这是最简单的服务器负载。所有的业务服务器暴露个客户, 存在安全问题。

2010-05-29 11:54:00 557 1

原创 基于任务的线程封装

一根线程, 需要一个全局函数名或是静态方法(其实就是个全局函数), 容易出错。另外过于底层的线程间通信必将掺和其中。 基于任务的线程对象的组成,可以从方面来看:线程对象的线程管理,线程对象的消息列队,  可参考ace的上层实现。线程管理可以在线程对象内部, 也可在外部, 但是外部比较好。 例如:class Task_Base{public:   int active();       

2010-05-19 18:52:00 334

原创 给初学编程者的一点建议

网上的文章不可尽信,只做参考吧。。。编程诚然是一个实践性很强的活动。 我认为有一个不好的现象, 很多“老手” 提出多看源码多编程就行了。 这样十分片面, 忽视了理论的存在。   多看源码, 无非是吸收代码中的思想, 但是仅仅从源码中 初学者又能看出多少的思想呢。 看了源码, 自己不会做的问题就很普遍了。 编程的实质并不是几行代码, 而是他的理论。   不知道编程的思想,本质

2010-05-15 07:34:00 416 1

原创 template多态用法小议

template多态用法小议template 是编译器绑定。 阅读template就是展开template的后的我们熟知的C++. 例如template class A{   T a;}直到调用时, 编译器才生产确切的类型。 A a; class A{   int a;}template多态是alt的发明。区别去有确定类型关系的继承多态, 他是一种特征多态,即只要符合模板的行为即

2010-05-07 08:47:00 384

原创 异步io, 完成端口补遗

 完成端口的演示代码网上很多, 浪费大家的时间。完成端口属于异步IO。异步对于客户程序开发来说, 我的理解是, 向操作系统投递消息, 操作系统io完成后, 通知客户程序。 他的效率完全取决于操作系统的实现。对于客户程序的异步效率取决于, 投递和完成数据的逻辑代码效率。 完成端口的而言, 一般通过线程来等待io完成, 得到数据后, 是在这个线程里处理, 还在交给另一个主动线程处理。 如果

2010-05-06 20:01:00 320

原创 面向接口小议

今天可能和一个要好的高中同学谈的太兴奋了, 又睡不着了。下面的议论一下面向接口面向接口=com? 面向接口=dll?我想com 这些只是面向接口的一种思想 。 dll只是实现方式。 面对接口的思想是对任何语言多是适用的。甚至认识世界也可以用接口的观念来理解。 举个不恰当的例子, 例如人扫地可以看成一个接口, 十分固定, 时间地点参数。 至于实现上你也可以用面向对象的思想实现, 比如扫把类,

2010-05-05 17:35:00 279

原创 接口和bug问题示例

上次文章里谈了接口和bug问题。 继续谈谈我对这个浅薄的认识。这里继续谈一下技巧(示例工程ftp://vckpub:[email protected]/CarrotRemindVS.rar)。assert TRACE 在开发中起到重要的作用。 但是似乎还是不够的。 我们需要更好的debug工具。 开发中, 错误是无法预知的。 那么我们需要知道跟踪程序运行时刻的流程, 而不是你去猜想程序到

2010-04-03 08:00:00 790 2

原创 一个程序生成另一个程序

以前看过authorware,authorware 生成的东西只有在authorware 里才能运行。 恰巧网上有人讨论怎么从一个程序生成另一个程序。 网上是有一些软件要怎么做。 比如电子教室, 录制生成的东西本身是exe。如游戏制作工具, 制作完就是一个exe(这里的exe不外带数据文件, 和库文件文件)我想软件就是数据+执行代码。 执行代码是很诡异的事情, 从母程序编译执行代码是不可思

2010-04-03 07:58:00 590

原创 多继承一题

侯捷 是我十分崇拜的一个智者。 他的著作和翻作一直十分喜欢。 他对技术是如此的执着和一丝不苟。不太想写些c++的东西, 断章取义比较严重。 仅以微薄的知识分析一下, 断章取义一下。class A {...};class B{...};class AB : public B, public A {...}... (大概是main吧)AB *pab = new AB();A* pa = (

2010-04-03 07:53:00 260

原创 sockaddr_in

  某个群中看到了一个问题。 "sockaddr_in和SOCKADDR_IN有什么区别  我看他们的数据结构都一样的 为什么要分呢""(sockaddr*)&svrAddr这个是什么写法  为什么要加括号" 第一个问题 “ms 十分渴望有自己的数据形式呗” (Just for fun!)第二个问题。 是关于协议族的。socket(套接字)源于伯克利, 支持丰富的协议族。 IP p

2010-04-02 10:38:00 347

原创 内存布局

1. 系统内存管理32位操作系统,连续寻址的范围是2^32bit=4G的空间。对这4G的空间, win32划分如下:dos区(win98),私有区, 共享区, 系统区。 0 ~ 4MB 为dos区, 4MB ~ 2GB为私有区,即win32应用程序运行的空间, 2GB ~ 3GB 为共享区被应用所有程序共享, 包括user32.dll, kernel32.dll,gdi32.dll。

2010-04-02 10:37:00 266

原创 线程续

在多线程的进程中, 线程是调度和执行的的单元。 不同的操作系统, 有不同的线程调度模式。 各种不同的模式的主要不同是:在竞争系统资源(特别是cpu时间)时, 线程所处的竞争范围不同。1. 进程竞争范围: 各个线程在同一进程内竞争“被调度的cpu时间”(但不直接和其他进程中的线程竞争)。2 系统竞争范围: 线程直接和"系统范围" 内的其他线程, 无论它们和什么进程关联。下

2010-04-02 10:36:00 215

原创 线程

谈到线程, 那么不得不先搞清楚内核对象。HANDLE 并不陌生, 这就是指向内核对象的。 以下是系统内核对象表进程线程文件事件信号量互斥器管道实际上内核对象是一个指针, 但是用户模式没有权限更改。 它可以有一个以上的拥有者, 比如不同程序访问某个进程OpenProcess。 所以他保持了一个引用计数。 当你调用CloseHandle , 引用计数减1, 如果引用计数降至0, 内

2010-04-02 10:34:00 266

原创 Windows 消息

 窗口过程(winproc), 是程序处理消息的地方, 但是不是由程序自己调用, 而是由Windows调用通过检索窗口注册类得到窗口过程函数指针(wndclass.lpfnWndProc  = WndProc)。 Mfc对此的封装可谓是两万五千里长征。要了解mfc的处理, 先得弄清楚sdk吧。 消息能够被分为「队列化的」和「非队列化的」。简单讲非队列化消息直接发送给窗口过程,而队列化消

2010-04-02 10:32:00 279

空空如也

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

TA关注的人

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