Posts Tagged ‘编程’
远比想象中的简单,其实就是两点:1.为C++风格的接口做一个wrapper,利用extern “C”。2.编译选项中加上-lstdc++ 比如说有一个库是这样的: ClassA.h: class A { private: int x; public: A(int _x); getResult(int ax); }; 编译成ClassA.o,然后打包成libClassA.a 为了能用c调用这libClassA,需要对它作一个Wrapper: CClassA.h #ifdef __cplusplus extern "C" { #endif int A_init(int); int A_getResult(int); #ifdef __cplusplus } #endif 需要注意的是,CClassA.h里,不能include C++的头文件,你知道的…… CClassA.c里面,wrapper函数的实现: #include "ClassA.h" A * a = NULL; int A_init(int _x) { a = new A(_x); } int A_getResult(int ax) [...]
稍微动点脑筋,修改下代码,然后让大家在网站上玩得更开心,这种感觉很酷! 基于sharetronix的xprana,在周末多出了两项新feature: 1.回复别人的状态的时候,自动引用别人的原文,紧跟在自己说的话之后,形如回复内容 @somebody:原文,反响良好。twitter没有这个功能,着实不爽,现在我们自己玩了,不跟它玩~ 2.嵌入视频支持国内视频站。从无到有的过程真好,虽然比较痛苦。现在可以支持优酷、百度、土豆的视频。同时我发现一个事情,国内的开发理念真的非常非常不open。国外视频站,接口上都做得很透明,用一个唯一的ID,就可以获取到视频flash地址、缩略图地址,既方便自己开发维护,也方便他人开发API之类的。而国内的视频站,要么是遮遮掩掩(或许是架构没做好,但那也太杯具了),要么直接就隐藏起来(比如优酷),对于第三方的开发人员及其不友好,就好像别人引用了它视频就会抢它生意一样。总之呢,经过一小把努力,还有liruqi的出谋划策,我们算是把土豆的视频缩略图搞定了。 TODO: 1. 融合过去的秘密树的模式 2. 热门状态、热门关键字 3. 搜索功能强化 4. 视频功能完善。支持优酷、百度,豆单等的缩略图。
下面这个简单的例子,从文本文件中读取一行脚本,并且将c中的变量值传进去,用脚本进行运算,将结果返回给c程序。 /** * @file prototype.cpp * @author Samuel.D * @date 2009/11/11 14:49:39 * @brief * **/ extern "C" { #include <lua.h> #include <lauxlib.h> #include <lualib.h> } #include <iostream> void stackdump_g(lua_State* l) { int i; int top = lua_gettop(l); printf(":::::total in stack %d\n",top); for (i = 1; i <= top; i++) { /* repeat for each [...]
大家都知道,linux底下做程序性能优化,gprof是个简单有效的工具,可是我今天在用gprof跑一个多线程的模块时发现奇怪的现象:统计出来的总用时跟实际时间非常不一致,而且CPU时间消耗的热点也非常不符合实际情况。仔细一看,理论上应该是被很多次调用的一个函数,总消耗时间竟然是 0s,这个函数会被很多线程调用到,莫非是gprof不支持多线程? 这种时候还是搜索引擎管用,马上找到了问题关键:gprof依赖于ITIMER_PROF信号来计时,而linux下的多线程中只有主线程才能响应这个信号,所以就导致子线程中的函数调用耗时都为0. 解决方案:网上的牛人已经给了最佳解决方案,对pthread_create做一个wrapper。(http://sam.zoy.org/writings/programming/gprof.html) /* gprof-helper.c — preload library to profile pthread-enabled programs * * Authors: Sam Hocevar <sam at zoy dot org> * Daniel Jönsson <danieljo at fagotten dot org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the Do What The Fuck [...]
lua是一个非常轻量级的脚本引擎,可以说是又小又快,所以在程序需要非常高的灵活性和扩展性的场合很受欢迎,其中比较经典的例子是《魔兽世界》、《博德之门》。 为了保证高度的定制性和效率,lua在API上做到了非常精简,所以刚接触的时候可能会有些不适:应用程序操作脚本引擎,以及同脚本运行环境交换数据竟然需要程序员自己去捣鼓它的栈,是不是很原始?可是这也是它效率高的原因之一啊。 lua的语法:类pascal,但是比pascal要更多,其中比较关键的就是关联数组和闭包(closure),还有基于协程的多任务技术。具体的我觉得可以rtfm,这里就不多说了。 还是说我们最需要关注的东西吧,lua的数据类型:numeric,string,function,table,userdata,nil。 numeric,就是数字,内部存储的是double型浮点数; string,类似于其他的很多脚本语言,lua的string是引用类型,实际的字符串被放到了内存池中,也就是说两个相同的字符串在同一个运行环境中只会占同一片空间,这在很多情况下可以减少不必要的内存分配,提高效率。 function,lua中的函数被看做是一种特殊的数据类型,这同闭包的支持是直接相关的——可以方便的动态生成函数出来。 table:关联数组,同python类似(牛逼的东西原理都差不多啊),对于纯数字的key,会尝试存储到array中,否则就存到hash中。曾经也像python一样,每个table都会预分配一个小数组,用于优化有大量小table的场合下的性能,但是到5.0的时候居然去掉了,理由是这个优化不够general,不过毕竟还是厚道地提供了一个lua_createtable() API函数,用户可以通过它来自己预分配空间。 userdata:用户数据,实际上就是一个void指针,用于将应用程序中的数据传到lua的运行环境中去。 nil:空值啊空值,一般来讲有两种用途,占座和清场,有时间再慢慢讲,没时间就算了。
