尝试从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")
}
答案 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