- 博客(13)
- 收藏
- 关注
原创 用 eventfd 在线程之间通信
最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件。后面两样都可以用 socket。 当然同主机进程也可以用别的,先不想那么多。我要说的线程之间,要实现和 socket 统一的 reactor 通信机制,比较好的是用 Linux 的 eventfd 。eventfd 是一个相对比较新的东西,资料不多,所以我也是摸着石头过河。基本做法就是用 eventfd_create
2011-10-30 15:11:13 11475
原创 在 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 14458
原创 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 14803 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 4525 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 4221
原创 Boost Phoenix 入门 (2)
Phoenix 库有着优雅的设计,它的11个模块分为4层,模块的功能之间完全正交,没有循环依赖。低层模块不依赖高层模块,同一层的模块之间也不互相依赖。这意味着用户可以自由选用自己需要的模块,而不需要把其余部分包含进来。 Core位于 Phoenix 库最底层(第一层)的是 Actor 模块,它是对于 Phoenix functor 的原型定义,做了一个 functor 最基本的工作:重
2010-01-13 19:31:00 4400
原创 Boost Phoenix 入门 (1)
Phoenix 可以看作是对 Boost Lambda Library 的重新实现。它是作为 Boost.Spirit 的一部分的,但是我们完全可以把它作为单独的库来使用,以达到一些非常酷和方便的效果。 基本上,Phoenix 大大方便了在 C++ 中进行 functional programming。当然,由于 C++ 不是函数式语言,我们没有可能进行严格的 functional pro
2010-01-13 15:29:00 5920 1
原创 D 语言的变量生命周期
对于编写应用的 C++ 程序员,生命周期 (Lifecycle) 恐怕是所有需要注意的事项里面最讨厌,最容易导致错误,而且出错后后果最严重的一个了。D 作为 C++ 的改进者,在生命周期上有了不少改进,不幸的是其中一些改进可能是违反 C++ 程序员直觉的,下面列出一些常见差异。struct 和 class在 C++ 里,struct 跟 class 没有本质区别。而 D 的 s
2009-11-03 12:43:00 3590 1
原创 D 语言
从前我是 C++ 的死忠 fans,我在 csdn 的博客几乎完全以 C++ 为主题。但是在一家投资银行用 C++ 写了两年半极度复杂的程序之后,我开始深深厌倦于 C++ 的繁琐。尤其是当脚本语言甚嚣尘上,而其总体效率(包括开发和运行)往往高于 C++ 的今天。 后来我看到了 D 语言,尽管它还很不成熟,但是已经非常可爱。之前我只是把它当做语法更加 consistent 的 C++ 来看待
2009-11-01 23:36:00 3106 2
翻译 C++ Template Metaprogramming 第九章试译: Crossing the Compile-Time/Runtime Boundary (1)
(看过了这么多编译期算法之后)还记得运行时吧?我们已经在编译期的天空飞行了好久,现在是时候脚踏实地了。一个有趣的程序终究还是要在运行时干点什么的。 本章就是关于怎样穿越C++编译期和运行时的边界——这一层“臭氧层”,如果你想要的话——这样我们的元程序可以真正的用户面前施展拳脚。在C++中,进 行这趟旅程的办法恐怕是无穷无尽,但是其中有一些更加有用,下面讲到的就是最常用的一些技巧。9.1 for_e
2007-12-19 06:37:00 2950 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 4755 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 10570
原创 新帐号
换了个帐号,取代掉以前的 ralph623。以后希望能在这边多发点东西出来。换句话说,我就是 ralph623。我会把以前一些还值得一看的文章转过来。当然主要还是新原创。
2007-12-19 01:09:00 2276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人