2013年6月5日

程序设计实例(3)

摘要: 最近在指导一个新同事完成一个C#的程序,本文是我对他程序在设计上的一些意见。1.要求: 做一个等待后台长时间操作的控件,在等待过程中该控件要显示一个等待画面,后台处理完成后自动关闭。2.过程: 该新同事很快完成了任务,原因是他从网上下载了一个现成的Demo。我检查后确认:该Demo满足我的要求,并且该同事也理解了其源代码,因此我承认他已经完成了任务。3.分析: 由于该源代码来自网上,代表一般的软件代码,提一些我的意见。 首先,来看一下源代码(下载):源代码主要有3个类: MainWindow:主画面 WaitingDlg:显示等待画面; ILongTimeTask... 阅读全文

posted @ 2013-06-05 11:46 钟湘光 阅读(408) 评论(1) 推荐(0) 编辑

2013年6月3日

node.js异步文件操作

摘要: nodejs的核心之一就是非阻塞的异步IO,文件读写操作时代码如下:var fs = require('fs'); fs.readFile('file.txt', 'utf-8', functino(err,data){ if (err) { console.error(err); } else { console.log(data); } }); console.log('end.'); 现在的问题是:这种异步是怎么实现的呢?我们知道读文件过程:Open-》Read-》Close,读文件必须按这个顺序执行,与node.js异布执 阅读全文

posted @ 2013-06-03 11:23 钟湘光 阅读(581) 评论(0) 推荐(0) 编辑

Node.js的事件处理

摘要: 从windows系统诞生以来,事件驱动成为最普遍的现象。Node.js也是事件驱动的,这看起来是理所当然的事。但Node.js的事件处理在软件架构里提到了一个更高的高度:基于事件驱动的软件架构。 nodejs事件的核心是EventEmitter。很多nodejs对象继承自EventEmitter,用来处理事件,及回调。 var util = require("util"); var events = require("events");//EventEmitter通过events模块来访问 function MyStream() {//新建一个类 eve 阅读全文

posted @ 2013-06-03 09:03 钟湘光 阅读(283) 评论(0) 推荐(0) 编辑

2013年4月26日

JavaScript中使用字符串调用函数

摘要: JavaScript中有一种函数的调用方法:使用函数名的字符串来调用function forTimeout(x, y){ alert(x + y);}function delay(x , y , time){ setTimeout('forTimeout(' + x + ',' + y + ')' , time); }这样的代码很难看,但这种方法却是JavaScript的利器。熟悉C语言的人知道#define这个东西在C语言中有多么牛逼,至今有一个映象深刻的案例:有人用C语言的define和##组合,构造出来了类似C++的编程方法!目前对Java 阅读全文

posted @ 2013-04-26 16:26 钟湘光 阅读(726) 评论(1) 推荐(0) 编辑

JavaScript 的几个概念

摘要: 花了几个小时学习了一下JavaScript(http://www.jb51.net/w3school/js/index.htm),有几个概念在这里纠结一下:1.JavaScript是面向对象的看段代码:<html><head><script type="text/javascript">function myfunction(){alert("您好!")}</script></head><body><form><input type="button&quo 阅读全文

posted @ 2013-04-26 15:33 钟湘光 阅读(203) 评论(0) 推荐(0) 编辑

2013年4月3日

Facade模式的一个应用

摘要: 最近做项目,经常要用到设备控制,控制的设备各种各样,如摄像机(焦距,预置位,转动),时序电源(开,关)等等,控制方式有网络方式,串口方式,甚至是第3方的API(如海康威视的产品),客户端操作的目的也不一样,有可能只想控制某个设备的开关,也可能是多个设备的联动(如一个场景的电影模式)。更进一步,你也许需要处理设备发回来的反馈。 功能这么多了,程序要怎么设计啊?最简单的方法就是不需要设计,用户按下什么按钮,就操作对应的设备执行什么功能,简单,容易实现。如果用极限编程,我就这么做的,用不了几分钟,任务就完成了。当然这样的代码没有重用性,也没办法与其他人合作。如果还有一点追求的话,得想想设计模式。.. 阅读全文

posted @ 2013-04-03 02:06 钟湘光 阅读(340) 评论(2) 推荐(0) 编辑

2013年3月18日

Marshal在C#中的应用(void *指针到IntPtr的转化)

摘要: C#调用C语言的API时一般把void *指针转换成IntPtr,但这经常远远不够的。在C语言中void *是个万金油,尤其是一些老的c语言程序,所有的参数就一个void*指针,里面包罗万象,然后在程序中来一个switch,甚至多个switch来处理不同的参数。最近笔者就碰到了这个问题,不得不来研究一下怎么把void *指针转换成IntPtr。1.void *指针到IntPtr的简单转化。c语言函数原型:int SetConfig(int type, void *p);这里假设p的所传递的参数式是结构体A:struct A { wchar_t osdbuffer[100]; un... 阅读全文

posted @ 2013-03-18 01:17 钟湘光 阅读(16709) 评论(1) 推荐(2) 编辑

2011年5月25日

WPF学习笔记二 依赖属性实现原理及性能分析

摘要: 在这里讨论依赖属性实现原理,目的只是学习WPF是怎么设计依赖属性的,同时更好的使用依赖属性。 首先我们来思考一个简单的问题:我们希望能验证属性的值是否有效,属性变更时进行自己的处理。回顾一下.net的处理方式Public Class MyClass{ private int index; Public int Index{ get{ return index; } set{ if(属性变更时){ //有效性检查 //处理或激发事件通知外部处理 } } }}现在,我们希望设计一套属性系统,能验证属性的值是否有效,属性变更时能进行处理(WPF属性系统肯定不是为这个设计的,但它支持这种功能)。我希. 阅读全文

posted @ 2011-05-25 18:47 钟湘光 阅读(3566) 评论(4) 推荐(9) 编辑

WPF学习笔记一 依赖属性及其数据绑定

摘要: 本文想通过由浅入深的讲解让读者比较深的理解依赖属性. 首先,我们回顾一下依赖属性的发展历史. 最初,人们提出面向对象编程时,并没有属性这个说法,当时叫做成员变量.一个对象由成员变量和成员函数组成,如下:Public Class A{ Public int Index;//成员变量 Public void Fun(){} //成员函数} 后来,提出了对成员变量的改进,增加了get/set 方法,成员变量自然也叫属性了。.net采用了这种方法:Public Class A{ Private int index;//属性 Public int Index{ Set{index = Value;} . 阅读全文

posted @ 2011-05-25 13:49 钟湘光 阅读(8535) 评论(4) 推荐(2) 编辑

2010年8月6日

程序设计实例(2)

摘要: 最近开发了一个可以显示PPT,PDF,图片,视频的播放器。我开发时是针对当前客户进行程序设计的,能满足当前用户的需求。至于将来程序设计合不合理我自己也不清楚,我完成的是阶段性任务,呵呵。1. 需求 (1) 能全屏播放PPT,PDF,图片,视频。(2) 可以远程控制启动/停止播放进程。(3) 用户可以通过触摸屏启动/停止播放进程。2.系统结构 系统结构这里不详细说了,把结果图画出来。3.物理结构 由... 阅读全文

posted @ 2010-08-06 17:52 钟湘光 阅读(435) 评论(0) 推荐(0) 编辑

导航