自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农自留地

我是码农我自豪

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

原创 用 eventfd 在线程之间通信

最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件。后面两样都可以用 socket。 当然同主机进程也可以用别的,先不想那么多。我要说的线程之间,要实现和 socket 统一的 reactor 通信机制,比较好的是用 Linux 的 eventfd 。eventfd 是一个相对比较新的东西,资料不多,所以我也是摸着石头过河。基本做法就是用 eventfd_create

2011-10-30 15:11:13 11469

原创 在 MinGW 下使用 C++ 标准线程库

<br /><br />MinGW 已经支持 gcc 4.5 了,它是目前支持 C++0x最完整的编译器了。我用它成功的写了些自己好玩的项目。<br />不过这个发行版并不完整支持 gcc 的 C++ 标准线程库,看了些资料,要修改一下它带的 C++ 标准库代码,重编译就可以。研究了一天,终于搞定了,主要参考了这篇文章,但是也还是要有些改动。记录一下。<br />首先是环境,gcc 4.5用的 C++ 库是 libstdc++ v3,这个库的完整代码包含在 gcc 代码里,去 GNU 下载一份 gcc 4.

2010-06-30 08:03:00 14441

原创 C++0x, rvalue reference, move semantics, RVO, NRVO — 我们到底要什么

 Visual C++ 2010 (VC10) 实现了一些颇有用处的 C++0x 新特性,其中就包括(万众期待的)rvalue reference 。本文不打算详述 rvalue reference 是什么了,关于这方面的文章已经不少,读者可以自己搜索来看看。我要说的是,今天我做了一些非常简单的关于 rvalue reference 的性能测试,其中有非常鼓舞人心的部分,也有 C+

2010-05-24 17:47:00 14799 21

原创 Boost Phoenix 入门 (4)

Function #include boost/spirit/home/phoenix/function/function.hpp> Phoenix 中的 function 可不是 boost 的泛型函数指针,它是用来帮助你实现 lazy function 的。把一个自己的函数实现成 lazy function 的主要好处就是,它可以和 Phoenix 的其它模块和谐共处。这个我们

2010-01-14 19:56:00 4521 1

原创 Boost Phoenix 入门 (3)

ActorActor 是整个 Phoenix 的核心,几乎所有的组件事实上都是 Actor。但是这个处于中心地位的组件,其实是一个很简单的 concept:Actor 就是一个functor,它接受0~N个参数。template struct actor : Eval{ return_type operator()() const; template

2010-01-13 20:06:00 4214

原创 Boost Phoenix 入门 (2)

Phoenix 库有着优雅的设计,它的11个模块分为4层,模块的功能之间完全正交,没有循环依赖。低层模块不依赖高层模块,同一层的模块之间也不互相依赖。这意味着用户可以自由选用自己需要的模块,而不需要把其余部分包含进来。 Core位于 Phoenix 库最底层(第一层)的是 Actor 模块,它是对于 Phoenix functor 的原型定义,做了一个 functor 最基本的工作:重

2010-01-13 19:31:00 4395

原创 Boost Phoenix 入门 (1)

Phoenix 可以看作是对 Boost Lambda Library 的重新实现。它是作为 Boost.Spirit 的一部分的,但是我们完全可以把它作为单独的库来使用,以达到一些非常酷和方便的效果。 基本上,Phoenix 大大方便了在 C++ 中进行 functional programming。当然,由于 C++ 不是函数式语言,我们没有可能进行严格的 functional pro

2010-01-13 15:29:00 5916 1

原创 D 语言的变量生命周期

对于编写应用的 C++ 程序员,生命周期 (Lifecycle) 恐怕是所有需要注意的事项里面最讨厌,最容易导致错误,而且出错后后果最严重的一个了。D 作为 C++ 的改进者,在生命周期上有了不少改进,不幸的是其中一些改进可能是违反 C++ 程序员直觉的,下面列出一些常见差异。struct 和 class在 C++ 里,struct 跟 class 没有本质区别。而 D 的 s

2009-11-03 12:43:00 3586 1

原创 D 语言

从前我是 C++ 的死忠 fans,我在 csdn 的博客几乎完全以 C++ 为主题。但是在一家投资银行用 C++ 写了两年半极度复杂的程序之后,我开始深深厌倦于 C++ 的繁琐。尤其是当脚本语言甚嚣尘上,而其总体效率(包括开发和运行)往往高于 C++ 的今天。 后来我看到了 D 语言,尽管它还很不成熟,但是已经非常可爱。之前我只是把它当做语法更加 consistent 的 C++ 来看待

2009-11-01 23:36:00 3101 2

翻译 C++ Template Metaprogramming 第九章试译: Crossing the Compile-Time/Runtime Boundary (1)

(看过了这么多编译期算法之后)还记得运行时吧?我们已经在编译期的天空飞行了好久,现在是时候脚踏实地了。一个有趣的程序终究还是要在运行时干点什么的。 本章就是关于怎样穿越C++编译期和运行时的边界——这一层“臭氧层”,如果你想要的话——这样我们的元程序可以真正的用户面前施展拳脚。在C++中,进 行这趟旅程的办法恐怕是无穷无尽,但是其中有一些更加有用,下面讲到的就是最常用的一些技巧。9.1 for_e

2007-12-19 06:37:00 2949 1

原创 C++ STL 算法 --- 你可能不知道的一些用法

distance很多时候我们希望在一个 vector ,或者 list ,或者什么其他东西里面,找到一个值在哪个位置,这个时候 find 帮不上忙,而有人就转而求助手写循环了,而且是原始的手写循环:for ( int i = 0; i     if ( vect[i] == value ) break;如果编译器把 i 看作 for scope 的一部分,你还要把 i 的声明拿出去。真的需要这样么

2007-12-19 02:16:00 4750 1

原创 C++ std::string --- 你可能不知道的一些用法

toupper, tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), toupper);cout transform(s.begin(), s.end(), s.begin(), tolower);cout 当

2007-12-19 02:13:00 10560

原创 新帐号

换了个帐号,取代掉以前的 ralph623。以后希望能在这边多发点东西出来。换句话说,我就是 ralph623。我会把以前一些还值得一看的文章转过来。当然主要还是新原创。

2007-12-19 01:09:00 2273

空空如也

空空如也

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

TA关注的人

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