摘要: 一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅 仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构 成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点提供的页面来完成某种功能,例如说我们 想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候我们需要向网页提交手机号码并从返回的 页面中解析出我们 阅读全文
posted @ 2013-07-10 17:54 qimi 阅读(705) 评论(0) 推荐(0) 编辑
摘要: 奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,Beam Search 阅读全文
posted @ 2013-06-26 21:11 qimi 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 在C中写回调函数非常方便,C++中定义回调函数要麻烦一些,成员函数牵涉到一个this指针问题。C++中的static成员函数没有this指针,也可以直接作为回调函数使用。C++的成员函数地址是唯一确定的,数据变量地址是可变的,因此编译器使用this指针把这两个部分连接起来,我们调用c++的成员函数,编译器会添加一个this指针到参数中。有一个类CTestclass CTest{public:void DoMsgFunc1(char* pMsg,int nID){}void RegiestMsg(int nSrcID,DoMessageFunc pFunc){m_pFunc = pFunc;}v 阅读全文
posted @ 2013-05-24 00:47 qimi 阅读(887) 评论(0) 推荐(0) 编辑
摘要: 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:public CDerive1,CDerive2{ };则在类CDerive12的对象中,仅有类CBase的一个对象数据虚基类的特点: 虚基类构造函数的参数必须由最新派生出来的类负责初始化(即使不是直接继承); 虚基类的构造函数先于非虚基类的构造函数执行。 阅读全文
posted @ 2013-05-21 22:47 qimi 阅读(197) 评论(0) 推荐(0) 编辑
摘要: Python Class 对象或类型通过内置成员 __dict__ 来存储成员信息。我们还可以通过重载 __getattr__ 和 __setattr__ 来拦截对成员的访问,需要注意的是 __getattr__ 只有在访问不存在的成员时才会被调用。 阅读全文
posted @ 2013-05-17 14:35 qimi 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 在阅读TGTD的代码时发现了一个非常诡异的问题,声明了一个空的全局数组,在使用的时候却发现数组非空,在main()入口时数组已经非空.数组时在什么地方被赋值了呢?最后发现__attribute__这个东东在起作用,类似于全局变量类的构造函数在main()前被调用.__attribute__((constructor)) __attribute__((destructor))#include<stdio.h>__attribute__((constructor)) void before_main(){printf("before main\n");}__attr 阅读全文
posted @ 2013-05-11 17:42 qimi 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 弄了两天,几乎要崩溃。终于搞定。开发板和pc机网线直连(注意不是普通的网线,而是特定的网线)。pc机配置:本地连接需要设置ip,和虚拟机已经开发板的ip在同一个网段。pc配置:192.168.1.109255.255.255.0192.168.1.1dns:192.168.1.1虚拟机配置:192.168.1.108255.255.255.0192.168.1.1dns:192.168.1.1设置虚拟机为Custom模式,并选择VMnet0在edit里面选择网卡,切记,设置为网线直连的那个驱动。开发板配置:在超级终端使用ifconfig来查看开发板ip使用ifconfig eth0 192.1 阅读全文
posted @ 2013-05-10 14:47 qimi 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。1 static_cast用法:static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转 阅读全文
posted @ 2013-05-10 01:43 qimi 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 I 阅读全文
posted @ 2013-05-04 00:07 qimi 阅读(1012) 评论(3) 推荐(1) 编辑
摘要: 在上一篇文章里,我们分析了libev整体设计思想和主循环的工作原理,也提到了watcher是衔接开发者代码的主要入口。watcher与开发者最接近,也与具体事件处理逻辑最接近。所以,watcher的具体实现,与性能的关系也相当密切。下面,我们就来分析一下,libev中常用的几种watcher的设计与实现。ev_ioev_io与底层ioev_io的主要使命就是监听并响应指定文件描述fd上的读写事件。对fd的监听工作,主要委托给底层的io库来完成。libev对目前比较流行的io库都提供了支持,如:select, epoll以及windows的iocp等。在这里libev使用了Adaptor模式,通 阅读全文
posted @ 2013-05-03 23:57 qimi 阅读(2927) 评论(0) 推荐(1) 编辑