无法从Lua-lanes调用C函数

时间:2013-09-27 17:54:21

标签: c lua lua-lanes

尝试从Lua模块调用C函数时,使用Lua-lanes,控件不会转移到'C'函数。 Lua-lanes在使用外部C dll时是否会以螺纹方式工作有什么问题?

以下是代码段

Lua Snippet:

lanes.gen("*",func)
thread = func()
thread:join()

function func()
    foo() -- expected to print "Hello world", by 
          -- calling below C function,but not happening
end

使用VS-2012编译为dll的C片段:

static int foo(lua_state *L)
{
   printf("Hello world\n")
}

2 个答案:

答案 0 :(得分:1)

你使用了错误的车道。这是你需要做的:

function func()
    foo() -- expected to print "Hello world", by 
          -- calling below C function,but not happening
end

local launcher = lanes.gen("*", func)
thread = launcher()
thread:join()

这应该可以正常工作。

答案 1 :(得分:1)

如果您希望在新线程中可以访问该C函数,那么在创建通道时,您必须以某种方式将其从主lua线程转移到新线程。您可以使用lua-lane docs中的.required来完成此操作。

例如,假设你有这个简单的foomodule:

// foomodule.c
// compiles to foomodule.dll
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"

static int foo(lua_State *L)
{
  printf("Hello world\n");
  return 0;
}

int luaopen_foomodule(lua_State *L)
{
  lua_pushcfunction(L, foo);
  lua_pushvalue(L, -1);
  lua_setglobal(L, "foo");
  return 1;
}

从你的lua剧本:

// footest.lua
lanes = require 'lanes'.configure()

function func()
  print("calling foo", foo)
  return foo()
end

thr = lanes.gen("*", {required = {'foomodule', }}, func)
thr():join()

一种可能的输出:

  calling foo     function: 0x003dff98
  Hello world