Chinaunix首页 | 论坛 | 博客
  • 博客访问: 856485
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: C/C++

2013-03-19 19:26:10


点击(此处)折叠或打开

  1. //下载lua源代码,编译生成luaXX.lib, luaXX.dll,将这两个文件及lua.h, lualib.h, lauxlib.h, luaconf.h拷贝到程序当前目录

  2. #include <time.h>
  3. extern "C"
  4. {
  5. #include "lua.h"
  6. #include "lualib.h"
  7. #include "lauxlib.h"
  8. };

  9. #pragma comment(lib, "lua51.lib") //<加载lua链接库
  10. lua_State *L; //<创建全局lua对象指针

  11. long long use_lua_fun(lua_State *L, const char funName[], int a, int b)
  12. {
  13. lua_getglobal(L, funName); //<获取函数名称
  14. lua_pushnumber(L, a); //<压栈第1个参数
  15. lua_pushnumber(L, b); //<压栈第2个参数
  16. int ret = lua_pcall(L, 2, 1, 0); //<调用lua脚本函数,2表示有两个个参数,1表示1个返回结果
  17. if(ret != 0)
  18. {
  19.    printf("lua_call errors:%d\n ,%s",ret, lua_tostring(L, -1));
  20.    return -1;
  21. }
  22. long long sum = (long long)lua_tointeger(L, -1); //<将栈顶转换成longlong型数据
  23. lua_pop(L, 1); //<弹出第一个元素
  24. return sum;
  25. }

  26. int main()
  27. {
  28. int i;
  29. long long sum = 0;
  30. L = lua_open(); //<初始化lua对象指针
  31. luaL_openlibs(L); //<加载lua函数库
  32. int ret = luaL_dofile(L, "test.lua"); //<加载脚本,如果脚本编译有错误,则加载失败
  33. if(ret != 0)
  34. {
  35.    printf("dofile errors:%d %s",ret, lua_tostring(L, -1));
  36.    return 1;
  37. }
  38. clock_t start, end;
  39. start = clock();
  40. for(i = 0; i < 4000000; i++)
  41.    sum += 1+2;
  42. end = clock();
  43. printf("In c++, runing time is %d ms %lld\n",(int)(end - start), sum);

  44. start = clock();
  45. sum = use_lua_fun(L, "loopAdd", 1, 2);
  46. end = clock();
  47. printf("lua loopAdd function, runing time is %d ms %lld\n",(int)(end - start), sum);

  48. sum = 0;
  49. start = clock();
  50. for(i = 0; i < 4000000; i++)
  51.    sum += use_lua_fun(L, "add", 1, 2);
  52. end = clock();
  53. printf("c++ loop lua's add function, runing time is %d ms %lld\n",(int)(end - start), sum);

  54. lua_close(L); //<关闭lua对象指针
  55. return 0;
  56. }

  57. test.lua 脚本内容如下

  58. function add(x,y)
  59.     return x+y;
  60. end

  61. function loopAdd(x,y)
  62.     local sum = 0
  63.     for i = 1,4000000
  64.     do
  65.     sum = sum + x + y
  66.     end
  67.     return sum
  68. end

  69. 输出结果

  70. In c++, runing time is 16 ms 12000000
  71. lua loopAdd function, runing time is 219 ms 12000000
  72. c++ loop lua's add function, runing time is 1937 ms 12000000

阅读(1933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~