摘要:
最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。1 Windows同步对象Event微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一贯的作风,有些地方设计的又有点怪异。Event通过函数CreateMutex创建,可以分为手动模式和自动模式两种模式,两种模式下表现迥异。和其他同步对象一样,在WaitForSingleObject或者WaitForMultipleObjects等待激发。激发(取消激发)法有3个函数SetEvent,ResetEvent,PulseEvent根据模式不同给出说明如下表:自动模式手动模式SetEv 阅读全文
摘要:
本文用于探讨在共享内存中使用容器的好处,以及几种在共享内存中C++模板容器的方法。1 为什么要在共享内存中使用模板容器?为什么要避开普通内存而选择共享内存,那肯定是使用共享内存的优势:l 共享内存可以在多进程间共享,到达进程间通信的方式。l 共享内存可以在进程的生命周期以外仍然存在。这就可以保证在短暂停止服务(服务进程coredump,更新变更)后,服务进程仍然可以继续使用这些共享内存的数据。如果这些优势在加上C++容器模板使用方便,开发快速的优势,无疑是双剑合璧,成为服务器开发的利刃。2 在共享内存中使用模板容器最大难点是?但如果要要做到让容器在模板中使用,最大的麻烦是什么?就是指针。(同步 阅读全文
摘要:
首先要说明,这个准确说并不是BOOST的singleton实现,而是BOOST的POOL库的singleton实现。BOOST库中其实有若干个singleton模版,这个只是其中一个。但网上大部分介绍的介绍的BOOST的Singleton实现都是这个,所以大家也就默认了。而且这个的确算是比较特殊和有趣的一个实现。网上比较有名的文章是这篇《2B程序员,普通程序员和文艺程序员的Singleton实现》 介绍,我虽然对Singleton模版无爱,但自己的项目组中也有人用这个实现,所以还是研究了一下这个实现,特别网上真正解释清楚这个东东的人并不多(包括原文),所以还是研究了一下。1 为啥2B实现有问题 阅读全文
摘要:
一套使用OLE高效读取,(也有写入的功能)的C++封装,我原来也是根据CSDN上面的一个帖子的代码进行的改进。因为原来的一帖子,总有人找我要这套代码,特此公布出来。 阅读全文
摘要:
使用Bing的translatorAPI的Python代码,实现了几个API,有unittest的东东作为例子。中文注释也不少,算是为开源做的一点带你贡献。 阅读全文
摘要:
这两天学习如何使用微软的一个API,用python写了接口代码使用HTTP方法测试,HTTP的API的最后返回是一个XML文件,翻了翻,看见python的xml的ElementTree这套接口的API看起来比较对胃口,于是使用了一下ElementTree进行解析 但死活用find,和findall两个函数接口服务得到希望的tag,百思不得其借, Python的docamention上面对这两个函数... 阅读全文
摘要:
本文描述VC++中的C语言使用代码文件描述符(file descriptor),和内核文件句柄HANDLE之间关系,以及两者之间的转换函数_get_osfhandle,_open_osfhandle以及使用他们的风险。在Windows代码中代码中间文件描述符号和内核句柄HANDLE千万不要共用。 阅读全文
摘要:
随手打开8月要检视的代码,发现这次两个组的代码风格居然都选择了匈牙利命名法。也就正好借着这个机会谈谈这种命名法。
由于这种命名法的深厚群众基础,我先套用一句小龙的说法,我说的都是错的。请大家抱着兼听则明的态度看这篇文章,大部分资料来自网上,我不是原创只是整理者,请参见附录:
BTW:2006年前我自己也是一个匈牙利命名发的坚定拥护者,直到sonicmao给我打开另外一扇门。
匈牙利命名法的前世今生
匈牙利命名法,由1972年至1981年在施乐帕洛阿尔托研究中心工作的-程序员查尔斯·西蒙尼Charles Simonyi发明。此人后来成了微软的总设计师,因为其祖籍是匈牙利(维基对这个命名有一些有趣的解释),固有此名。
匈牙利命名法的变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用途,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写,以区别前面的类型指示字母。而在最前面加入前缀m_,s_,g_表示变量的作用域类型。匈牙利命名法的目标便于记忆,而且使变量名清晰易懂(一看变量就知道他是什么类型的),增强了代码的可读性,方便各程序员之间相互交 阅读全文
摘要:
Windows,Linux的select函数功能差异感谢主,Windows当年也实现了select函数,这让我们的跨平台大业至少顺畅了一节。但由于Windows渗入骨髓的叛逆心理,他总要和UNIX的实现保持一些差别,让你无可奈何。首先是Windows的select函数的参数接口设计和Linux下有较大差别,这个在我的《设计极其糟糕的select函数》就讨论过,相对而言,在参数设计上,Windows的设计明显好于Linux。这次我们聊聊他们的功能差异。1 无句柄等待触发时的处理的差异最近的新的重构代码,发现在Windows下,程序的CPU很高,测试发现select函数并没有等待,return-1 阅读全文
摘要:
模版策略化是使用模版参数实现策略化,将策略的行为决定时间放到了编译期,性能最优。但适合代码规模不大,或者本身就是模版代码使用,(追求酷代码)。同时由于是将策略决定时间放在了编译期,会在继承,大规模使用的时候也必须使用模版策略行为。从而使策略的影响扩大化。
多态策略化是使用多态方法决定策略行为,在运行时调用者通过参数决定使用什么多态行为,同时由于决定行为放在运行时,不需要相关代码做出多大改变就可以使用。不足是性能相较模版策略化要弱一点点,在运行是必须要调用者控制策略行为。
比较而言,我其实认为多态策略化有更好的应用场景。个人感觉,有些时候,过度的模版设计反而会降低代码的可用性,影响使用者。 阅读全文