正文内容加载中...
posted @ 2015-05-11 12:13 健忘猪 阅读(2518) 评论(0) 推荐(0) 编辑
摘要: 如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack。那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西)。那么至于如何操作栈上的数据,我想官方文档上已经说得很清楚了,不过最初我对于栈的顺序有一些迷糊,所以就说说这个。现在假如我有如下的一段代码:代码:lua_State* L = lua_open();lua_pushnumber( L, 211 );lua_pushnumber( L, 2222 );lua_newtable( L );lua_close( L );那么当执行完lua_newtabl 阅读全文
posted @ 2013-12-16 16:58 健忘猪 阅读(6333) 评论(2) 推荐(0) 编辑
摘要: ——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2) 在主线称中起动线程1,打印“this is thread1”,并将g_Flag设置为13) 在主线称中启动线程2,打印“this is thread2”,并将g_Flag设置为24) 线程序1需要在线程2退出后才能退出5 阅读全文
posted @ 2013-12-16 15:50 健忘猪 阅读(451) 评论(1) 推荐(0) 编辑
摘要: 项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++。对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控。从阅读结果上来看,起码在内存管理上,帮助还是很大的。1.tolua++如何将c++对象导入到lua里tolua++为每一个传入lua的对象建立一个userdata,userdata的值,是c++对象的地址。userdata的metatable,是一个tolua++建立的,记录了userdata对应c++类型信息的表格,包括导出的成员变量、成员函数等信息。对于成员变量的读取赋值,tolua++是在met 阅读全文
posted @ 2013-12-16 15:49 健忘猪 阅读(1786) 评论(0) 推荐(0) 编辑
摘要: 一、cocos2dx对tolua++绑定的修正A.c对lua回调函数的引用在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟、菜单选择等)。如果采用脚本方式编写游戏的话,这些回调函数也是需要写在脚本里的。实现这个功能,就需要lua将自己的函数传递给c++,c++保持对这个函数的引用,不要让这个lua函数被垃圾回收,并在适当的时候回调这个lua函数。这种需求的一般抽象是在C环境下保存lua状态,在PIL(Programming In Lua)里有比较详尽的描述。可以使用luaL_ref函数,将一个luaValue(function、table等没有直接对应c类型的数据)存储到LU 阅读全文
posted @ 2013-12-16 15:41 健忘猪 阅读(2269) 评论(0) 推荐(0) 编辑
摘要: 一、下载cocos2d-xhttp://cocos2d-x.org/projects/cocos2d-x/wiki/Downloadcocos2d-x-2.1.4.zip @ June.18, 2013我们可以看到最新版本的2.1.4,这个版本提供了一个用python命令来建立各平台的项目,十分便利下载,解压(建议解压到主目录下的)二、下载pythonhttp://www.python.org/getit/建议选择2.7.5版本的下载Python 2.7.5 Mac OS X 64-bit/32-bit x86-64/i386 InstallerPython 2.7.5 Mac OS X 32 阅读全文
posted @ 2013-12-16 14:36 健忘猪 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 导出 C/C++ API 给 Lua 使用cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的。为了使用 Lua 脚本语言进行开发,我们利用tolua++工具,将大量的 C/C++ API 导出到了 Lua 中。使用 tolua++ 的基本步骤:从 C/C++ 源代码复制头文件的内容到 .tolua(tolua++ 文档中称为 .pkg)文件中。修改 .tolua 文件内容,去掉 tolua++ 无法识别的内容,以及不需要导出到 Lua 的定义。运行 tolua++ 工具,根据 .tolua 文件生成 luabinding 接口文件(由 .cpp 文件 阅读全文
posted @ 2013-12-16 11:51 健忘猪 阅读(2387) 评论(0) 推荐(0) 编辑
摘要: (1)Callback方式Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件:typedefvoid(__stdcall*DownloadCallback)(constchar*pURL,boolbOK);voidDownloadFile(constchar*pURL,DownloadCallbackcallback){coutOnDownloadFinished(pURL,true);}}private:IDownloadSink* 阅读全文
posted @ 2013-06-25 10:33 健忘猪 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 0xcdcdcdcd - Created but not initialised0xdddddddd - Deleted0xfeeefeee - Freed memory set by NT's heap manager0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ0xabababab - Memory following a block allocated by LocalAlloc() 阅读全文
posted @ 2013-05-31 17:57 健忘猪 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 概览: Chromium是一个有着诸多线程的产品。我们尽量保证UI的快速响应,这就意味着不能有任何的堵塞的I/O或者耗时操作来堵塞UI线程。我们把在线程间传递消息作为线程间通信的方法。我们摒弃了锁和线程安全对象,取而代之的是一个对象只生存在一个线程中,我们通过在线程间传递消息来通讯,并且我们使用回掉接口(由发送消息者实现)来完成线程间的请求。 Thread在base/thread.h中定义,我们已经有很多线程以至难以跟踪了,大体上你可以使用一个下面列表中已有的线程而不是新建一个线程。每个线程都有一个MessageLoop(参考:base/message_loop.h)为线程处理消息。你可以.. 阅读全文
posted @ 2013-01-14 02:53 健忘猪 阅读(2240) 评论(0) 推荐(0) 编辑