自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李永亮的专栏

设计改变中国!

  • 博客(22)
  • 收藏
  • 关注

原创 运行时库的配合问题

今天在编译工程的时候出现链接错误,主要的原因还就是在引用运行时库的问题。那么引出一个好像平时不是特别多人注意的问题。在一个比较大的工程中,常常包含很多静态库和动态库。但编译的时候经常通不过,就细节而言,往往是因为引用的库和当前工程的运行时库不吻合,那么在Windows下比较重要的问题就是使用统一的运行时库,并且将Debug和Release分开,区别对待。 

2006-08-30 16:59:00 847

原创 ACE Link gettimeofday的错误

今天在使用ACE_OS:: gettimeofday的时候,在Debug版本上编译正常,但是在release版本上出现编译问题。我上网查了一下,可能是与run-time library有关。于是检查这一选项,果然发现问题。在Release的时候选用了Debug Mutithreaded DLL,把这一项改成Mutithreaded DLL就编译通过。由此导出一项注意,在ACE编译的时候,一定要搞定

2006-08-30 15:34:00 1871

原创 ACE的读写锁

       ACE定义了四个宏:ACE_WRITE_GUARD、ACE_WRITE_GUARD_RETURN、ACE_READ_GUARD、ACE_READ_GUARD_RETURN。这四个宏的目的是为了实现高效的读写机制。其实就是定义两种对象:ACE_Read_Guard和ACE_Write_Guard。这两个类的意义在于在构造的时候,自动对应类型的锁,在析构的时候释放。为了保证高效率,如何构

2006-08-29 15:16:00 6881 6

原创 ACE_Condition_Thread_Mutex源码剖析

ACE_Condition_Thread_Mutex是ACE线程级别的条件变量。对于ACE_Thread_Mutex来说,它是被引入到ACE_Condition_Thread_Mutex中,作为ACE_Condition_Thread_Mutex的一个引用成员。另外ACE_Condition_Thread_Mutex还存在一个ACE_cond_t作为条件变量。ACE_Condition_Threa

2006-08-25 11:13:00 2613

原创 C++编程规范之模板与泛型

模板与泛型第64条:理智地结合静态多态性和动态多态性摘要:努力让这二者互补,让1+1>2。       涉及到模板的话题总是很复杂,如果将模板和虚拟结合到一次,本来就是个不简单的话题。       动态多态性的优点是基于超集/子集关系的统一操作,动态绑定和分别编译。静态多态性的优点是基于语法和语义的统一操作,静态绑定和高效率。在ACE中使用比较多的这种组合,将来可能会写一下设计

2006-08-24 17:45:00 971

原创 NMS PCI卡的注意事项

       在使用NMS PCI的卡的时候,需要注意的问题是H.100的Bus线的问题。如果使用多块PCI的卡,那么需要将H.100 Bus用总线串起来,否则跨卡操作会出现问题。 

2006-08-23 19:10:00 750

原创 ACE_Message_Queue源码剖析

       想到写这个是因为昨天看到Unix下服务器的模式,其中一种有一个线程用来accept,并将请求放在有界临界区中,其他工作线程池通过访问有界临界区获取请求,执行请求。所以就想追溯一下使用ACE_Message_Queue实现这种模式的可行性。对于ACE_Message_Queue其他功能不做深究。       ACE函数看上有这么两种Function X和Function X_i。后

2006-08-23 11:45:00 2725

原创 C++编程规范之名字空间与模块

名字空间与模块第57条:将类型及其非成员函数接口置于同一名字空间中摘要:非成员也是函数:如果函数也是类X接口的一部分,那么也要放入相同的名字空间中定义它们,以便正确实用。       名字空间是屏蔽名字污染的好工具。当系统变得很大时,没有人能确定彼此之间不存在冲突,名字空间能有效控制这样无意识的错误。 第58条:应该将类型和函数分别置于不同的名字空间中,除非有意识让它们一起工作

2006-08-22 19:36:00 1037

原创 Singleton模式的静态局部变量的问题

//”TestSingleton.h”class TestSingleton{TestSingleton& Instance(){static TestSingleton myTest; return myTest;}}       这是Singleton的写法,请问有问题么?也许有,也许没有。看你的运气了。这样的做法真是让自己命悬一线。可怕的错不是那种狰狞的错误,而是这样

2006-08-17 18:23:00 1785 6

原创 C++编程规范之构造、析构与复制

构造、析构与复制第47条:以同样的顺序定义和初始化成员变量摘要:与编译器一致。成员变量初始化的顺序要与类定义中声明的顺序始终保持一致。       之所以说这一点,其实还是一个老问题,就是变量间相关依赖的问题。成员变量之间的依赖并不是个好现象,如果可以尽量减少这种依赖,如果出现循环依赖就不好了。我的建议是不要指望编译器首先会初始化哪个成员对象,这是我们所无法控制的。 第48条:

2006-08-17 15:59:00 1084

转载 Exceptional C++ Style目录

泛型编程与C++标准库 1 第1条  vector的使用 2 第2条  字符串格式化的“动物庄园”之一:sprintf 9 第3条  字符串格式化的“动物庄园”之二:标准的(或极度优雅的)替代方案 14 第4条  标准库成员函数 23 第5条  泛型性的风味之一:基础 26 第6条  泛型性的风味之二:够“泛”了吗 30 第7条  为什么不特化函数模板 36 第8条  友元模板 42 第9条  导

2006-08-16 17:10:00 772

原创 C++编程规范之类的设计与继承

类的设计与继承第32条:弄清楚要编写的是哪种类摘要:了解自我:有很多种不同的类。要弄清楚要编写的是哪一种。       类的分类是如此之多,然而我们写的时候未必知道我们可能存在哪些疏忽。所以清晰类的分类应该对细节很有好处。       值类,事实上意味着c的struct。也就是说作为值类,仅仅是值的集合,而不该包含别的。最好让编译器实现构造函数,不要带有虚函数,包括析构函数。否则会

2006-08-15 18:35:00 857 1

原创 ACE_Guard的运用

对于,线程锁来说,最可怕就是出现由于某种原因没有解锁从而造成线程死锁。C++的对象构造和析构给出了很好的办法,具体的实现不外乎先前《自行释放ACE_Message_Block》中所写的那样。这里所要说的是ACE已经作了的工作。#define ACE_GUARD_ACTION(MUTEX, OBJ, LOCK, ACTION, REACTION) /   ACE_GuardMUTEX > O

2006-08-10 14:51:00 8860 1

原创 关于Socket编程的一点思索

今天在做测试的时候,发现Socket通信很慢的情况。这让我觉得需要有些地方要做一些优化的工作。现在使用的是异步Socket,使用同一个线程进行收发。在这种情况下,就会出现一个包可能在recv的时候无法一次收齐,特别是一些长度比较长的包。这时候应该有两种做法,一是在recv一次后,立刻让出线程,无论包有没有收完;二是,分成两个Socket,一个收一个发,不至于因为收的情况,影响到发的问题。这两种

2006-08-08 18:21:00 1166

原创 SIP的early media和SDP协商

       在SIP的运行中,我只算是刚刚入门,这里只写一些很浅显的心得。慢慢的积累,总可以能有大成。       RFC3960描述SIP的early media能力。early media相当于Q.931中accept call,在通话之前建立媒体流。我曾经测试过early media的能力。我在180消息中发送了SDP,在此消息后,媒体流建立。但是在这个情况下,并非完全正常。因为在18

2006-08-07 18:49:00 14306

原创 C++编程规范之函数与操作符

函数与操作符第25条:正确地选择通过值、(智能)指针或者引用传递参数摘要:正确的选择参数:尤其要分清参数传递的性质。       对于输入参数,可以尽量使用const类型,变量可以使用const变量,因为变量复制的代价是极小的;至于对象可以使用const指针或者引用的方式进行传递。这样可以减少复制带来的代价。       对于输出参数,如果参数的可选的,可以使用指针来进行传递,而用

2006-08-06 15:54:00 981

原创 从ACE源代码库看Socket编程应该怎么写

       我的同事和我说,传说中神乎其神的程序员很多,但未必有很多人会写Socket编程,我曾经不以为然。我曾经看过不少Socket编程的Demo,也就认为Socket编程也就这样了。但或许我错了。我的同事告诉我,socket编程和高效socket编程是两码事,我也不以为然。我曾经很鄙视微软RPC。所有的一切一切证明我都错了。       错误的原因在于我看到了ACE的源码。下面是一个片断

2006-08-04 18:52:00 2393 1

原创 不要轻易在头文件中打开namespace

今天发现一个错误在编译一个类似于DWORD test(void *list);出现错误,错误竟然是和std::list冲突,吐血。我不能确认这是C++语义的问题还是VC6太土了,但这个问题需要集中避免,我不知道什么会导致这么夸张地问题,结果我找了好些文件。在某个头文件中,发现了using namespace std; 我想它一定难辞其咎。结果我把这一行注释掉,就发现一切OK。所以,这一

2006-08-04 18:12:00 988

原创 C++编程规范之编程风格

编程风格第14条:宁要编译时和连接时错误,也不要运行时错误摘要:能够在编译时做的事情,就不要推迟到运行时。       我记得在《重构》中有一条叫做“用测试取代异常”,我觉得差不多表达的是一个意思,即运行期错误的代价比较大,所以尽量转化成编译期错误和链接错误。这和人生的道理是相通的,我一直坚持认为,如果一定要摔跟头的话,越早摔越好。因为摔得越晚,成本越高。但同时还有一个问题就是,千万不

2006-08-04 14:57:00 1314 1

原创 C++编程规范之设计风格

设计风格第5条:一个实体应该只有一个紧凑的职责摘要:一次只解决一个问题:只给一个实体(变量、类、函数、名字空间、模块和库)赋予一个定义良好的职责。随着实体变大,其职责范围自然也会扩大,但是职责不应该发散。       对于string的抱怨见于Sutter先生的《Exceptional C++ Style》,其中将string做了完全的解构,非常精彩。       事物往往是由小变

2006-08-03 14:27:00 1052

原创 Java对象赋值引发的问题

今天,工作中遇到一个问题。同事在Java编写的时候出现一个问题,就是Java有一个队列,然后new出来一个对象,后续操作是不断收到事件然后将对象用operator = 赋值后,加入队列中,这样直接的后果导致队列中的对象是重复的。引发的原因就是因为Java中对象赋值和C++的对象赋值不一样,Java是引用而C++默认是浅拷贝。所以导致了这个问题。因为队列中的对象引用的同一块内存。在使用C++

2006-08-02 20:36:00 3275 1

原创 C++编程规范之组织和策略问题

组织和策略问题第0条:不要拘泥于小节(了解哪些东西不应该标准化)摘要:只规定需要规定的事情:不要强制施加个人喜好或者过时的做法。程序的编写存在一些准则是必要的,例如命名准则,但没有必要要求所有人都遵守这些,否则条条框框太多,否则限制了语言的能力。函数并不是单入口单出口,虽然表面上看是的。 第1条:在高警告级别干净利落的进行编译摘要:高度重视警告:使用编译器最高的警告级别

2006-08-01 20:21:00 759

空空如也

空空如也

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

TA关注的人

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