桃源谷

心灵的旅行

人生就是一场旅行,不在乎旅行的目的地,在乎的是沿途的风景和看风景的心情 !
posts - 32, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C++

posted @ 2010-08-01 13:19 lymons 阅读(7257) | 评论 (3)  编辑 |

     摘要: 在C++下编写synchronized method比较难 (1)CommentsAdd star

在Java中有叫做synchronized这样一个方便的关键字。使用这个关键字的话,就可以像下面那样能够简单的进行"同步"method. 然而,被同步的method并不表示它就能在多线程中同时被执行.   阅读全文

posted @ 2010-07-17 12:17 lymons 阅读(3280) | 评论 (0)  编辑 |

     摘要: 1. 添加右键弹出菜单
我们在这里,将会在插件中加入右键弹出菜单功能。也就是如下图那样,在文档区内,点击鼠标右键时会弹出的菜单。我们将在这个菜单中加入属于我们插件的菜单项目”testplug”。

加入菜单项目的效果如下图:


让我们看看,咱们创建的插件工程中,给我们提供了什么样的入口代码了吧。
1. 在函数BuildModuleMenu中添加菜单项。
在文档的视图里才加入菜单项的入口函数是BuildModuleMenu,它的初始代码是下面那样:
void testplug::BuildModuleMenu(const ModuleType type, wxMenu* menu, const FileTreeData* data)
{
//Some library module is ready to display a pop-up menu.
//Check the parameter \"type\" and see which module it is
  阅读全文

posted @ 2010-04-29 20:58 lymons 阅读(2210) | 评论 (0)  编辑 |

     摘要: 1. 创建Plugin工程

① 从File主菜单中,选择new -> Projects… , 打开工程创建向导对话框。
② 在Projects的列表框中,选择 Code::Blocks plugin ,然后点击 Go 按钮,进入插件创建向导对话框。
③ 创建向导的第一个画面中有重要信息说明。请注意的是里面提到了必须设置#cb, #wx这两个全局变量。不过,还好咱们在《CodeBlock插件开发指南 一》中已经对这两个变量进行了设置。咱们在这里,直接点击Next进入到下一个画面即可。

  阅读全文

posted @ 2010-04-20 22:21 lymons 阅读(5050) | 评论 (0)  编辑 |

     摘要: CodeBlocks插件开发指南(一)
By Lymons(lymons@gmail.com) 2010/4/14

CodeBlocks是一个优秀的C/C++ IDE开发环境,另外它也是开源的,也是跨平台的.你能够利用它的源代码进行二次开发,也能为它制作自己的插件. 它的GUI是利用了跨平台的wxWidgets库来做成的,所以它才能够实现跨平台.

下面将介绍CodeBlock的插件制作方法,当然它必须得通过编写自己的程序才能实现,所以懂得一些C++的编程知识能够帮你更容易去理解它的内容.

1. 准备CodeBlocks的开发环境  阅读全文

posted @ 2010-04-17 16:22 lymons 阅读(9445) | 评论 (3)  编辑 |

     摘要: W2K信号(Signals)的设备驱动

Unix下的信号提供了一个简单的IPC机制,也就是当进程收到一个信号后会异步(asynchronous) 地调用你的信号处理函数(也叫做句柄),不管你的代码是否已经处在执行的过程之中。 而在Windows 2000(译者注:版本高于W2k的Windows平台)下就需要用到一个设备驱动,以便你能使用异步过程调用(asynchronous procedure calls , 简称APCs或者APC) 来达成同样的效果.

By Panagiotis E.
August 01, 2001
URL:http://www.ddj.com/windows/184416344

翻译:Lymons (lymons@gmail.com)
  阅读全文

posted @ 2010-04-13 10:29 lymons 阅读(2266) | 评论 (0)  编辑 |

     摘要: 简介
我拿到了一个任务,就是写一篇关于游戏引擎设计的报告。为此,我开始用C++来实现一个框架,它包含了一些设计模式(Design Patterns)的基本实现以及类似于基于原则设计(Policy based design)的一些C++概念。而本文就是谈论我的设计,并且里面也包括一些可编译的代码片断。
背景
在本文描述的框架中使用了一些著名的设计范式(design paradigms),如:基于原则的设计(Policy based design),装饰者(Decorator)和策略(Strategy)模式,以及相应的C++的代码实现。
代码的功能说明
基于原则的设计是用于游戏的设置
在进入到足球游戏引擎设计的细节之前,先讨论一下游戏中的设置。在任何游戏中都允许用户在游戏开始期间来选择游戏的难度。我假设这里有三种难度级别,即:低级,中级,高级。因为这些级别允许在开始的时候被选择,这就给了我们一个机会可以利用模板类来使用基于原则的设计(基于Andrei Alexandrescu的书《Modern C++ Design》)。  阅读全文

posted @ 2009-12-22 14:57 lymons 阅读(1902) | 评论 (1)  编辑 |

     摘要: 在本文中,使用Visual Studio2003作为例子来描述宏的做成步骤。(我想在Visual Studio2005、2008中也应该是一样的)  
     
在编写ASP代码时,可以使用单引号来注释掉不要的代码。在Visual Studio的IDE环境中也支持使用块注释的方式把一整段的代码注释掉。  
不过有的时候,也有要求用<%' ~ %>这种注释格式来注释掉HTML中的代码,但是包括Visual Studio在内的一些流行的编辑器都不支持这种格式的注释方式。不过还好,Visual Studio的IDE支持宏的功能,因此我们可以使用VBScript宏来定制任意格式的代码注释  阅读全文

posted @ 2009-12-21 21:13 lymons 阅读(2198) | 评论 (0)  编辑 |

     摘要: 函数指针提供了一些极其有趣,有效和绝妙的编程技术。你能用它代替switch/if语句来实现你自己的晚绑定(late-binding)或者作为回调(callback)来使用。不幸的是–可能由于它的语法比较复杂–几乎所有的电脑书籍和文档上都讲解的不多。即便如此,它们也只是做了相当简单和肤浅的说明。而对于函数指针你只需要明白它是什么以及它的语法,因为它和一般的指针比起来从来不用关心内存的分配和释放,所以它被使用的时候是不易产生错误的。但你要注意的是: 要时常问自己是否真的需要函数指针。因为虽然用它来实现晚绑定也很漂亮,但用既存的C++数据结构的话会使代码更可读和更简洁。另外,晚绑定的一方面实际上就是运行期(runtime): 如果你调用了一个虚拟函数,你的程序会根据一个存储所有函数的虚拟表(V-Table)自己来确定到底真正调用的是哪一个。这就要花费一些时间而用函数指针代替虚拟函数的话有可能会节省一些时间。BTW: 现代的编译器在这方面都做得非常好!就那我的Borland编译器来说这个时间就比调用一次虚拟函数能节省2%。

注:晚捆绑(late binding)可能来自c++  阅读全文

posted @ 2009-02-12 16:08 lymons 阅读(2751) | 评论 (5)  编辑 |

posted @ 2009-02-02 13:08 lymons 阅读(2006) | 评论 (0)  编辑 |

     摘要: bstract factory:为创建相互关联(风格类似)的一系列的对象提供了一个通用接口,而不需要指定具体的类(产品)名。
factory method:定义一个用来创建对象的接口,并让子类来决定实例化哪一个具体的类(产品),从而让具体类的实例化延迟到子类。
他们的主要区别在于,abstract factory强调的是把诺干个产品按照风格进行分类, 为相同风格的一系列对象(产品)提供一个工厂类,因此,只要改变工厂类的实例,就能到达改变这一组产品的风格和外观。而这一风格的产品的生产可以利用工厂方法来实现. 这其中, factory method强调的则是先在父类实现创建对象的行为,具体的行为或者具体对象(产品)的实例化则延迟到子类实现。  阅读全文

posted @ 2009-02-02 12:58 lymons 阅读(639) | 评论 (0)  编辑 |

posted @ 2009-02-02 12:52 lymons 阅读(399) | 评论 (0)  编辑 |

posted @ 2009-02-02 11:28 lymons 阅读(498) | 评论 (0)  编辑 |

posted @ 2009-02-01 15:41 lymons 阅读(1430) | 评论 (1)  编辑 |

posted @ 2008-12-29 17:11 lymons 阅读(2650) | 评论 (0)  编辑 |

posted @ 2008-12-25 14:08 lymons 阅读(1289) | 评论 (0)  编辑 |

posted @ 2008-12-19 11:01 lymons 阅读(1221) | 评论 (0)  编辑 |

     摘要: 在高级语言例如C++中有效的使用共享内存并不是一件浅显易懂的事情,但是它也能克服这些内在的困难。这篇文章描述了在Linux上使用共享内存的两个C++设计模式并包含了样例代码,以及给读者打开了更有效的进程间通信的一扇门。

在面向对象系统中,当一个对象接收到一个消息时它能够发送一套事件。这些事件主要在同步模式下被处理。这个调用进程或者线程在发送消息调用完成之前,发送给对象一个消息和处理事件。然而,如果这个对象送出这些被更多的进程共享以及驻留在内存里的事件,情况就稍微的发生了一些变化。

这篇文章用两个C++的设计模式详细的描述了上述的情况,并且用一些例子程序阐明了解决方案。
  阅读全文

posted @ 2008-06-01 21:41 lymons 阅读(846) | 评论 (0)  编辑 |

     摘要: Unix跟Windows等那些”对于开发者易于使用”的OS比起来,在信号和线程的利用方面有诸多的限制。但是即使不知道这些知识就做构架设计和实现的情况也随处可见。这个就是那些经常不能再现的bug的温床吧。

因此,我想分成几回来写一些准则来防止陷入到这些圈套里。

准则1:不依赖于信号收发的设计

·给其他进程以及自己发送异步信号并改变处理流程的设计不要做

异步信号是值用kill系统调用来创建?发送的信号、例如SIGUSR1,SIGUSR2,SIGINT,SIGTERM 等
简单的使用忽略信号(SIG_IGN)则没有问题
·不要把线程和信号一起使用
  阅读全文

posted @ 2008-06-01 20:27 lymons 阅读(1331) | 评论 (0)  编辑 |

     摘要: 准则2: 要知道信号处理函数中可以做那些处理
· 在用sigaction函数登记的信号处理函数中可以做的处理是被严格限定的
· 仅仅允许做下面的三种处理
1. 局部变量的相关处理
2. “volatile sig_atomic_t”类型的全局变量的相关操作
3. 调用异步信号安全的相关函数
· 以外的其他处理不要做!  阅读全文

posted @ 2008-06-01 20:22 lymons 阅读(2183) | 评论 (0)  编辑 |

     摘要: 在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可能会死锁.请不要,在不能把握问题的原委的情况下就在多线程程序里fork子进程.  阅读全文

posted @ 2008-06-01 20:16 lymons 阅读(12960) | 评论 (0)  编辑 |

     摘要: 隐锋同学的blog上有关于libxml2的一篇文章,正好最近要使用这个库来处理xml文件。
不过在测试时我们发现用文章里F. 添加属性例程代码 时,添加的keyword结点后面没有回车,
跟后面的结点挤在一行了,不是很好看。
例如,以下的xml例子文件  阅读全文

posted @ 2007-11-30 13:44 lymons 阅读(10002) | 评论 (8)  编辑 |

posted @ 2007-11-28 11:56 lymons 阅读(18953) | 评论 (20)  编辑 |

posted @ 2007-11-26 21:57 lymons| 编辑 |

我的个人简历第一页 我的个人简历第二页