如何使用C线程多次调用lua函数

如何使用C线程多次调用lua函数,c,multithreading,lua,C,Multithreading,Lua,以下代码每次在不同的部分由于不同的原因崩溃。什么都试过了。我希望能够从lua脚本调用“sleep”,并多次调用lua函数,而无需我的C程序等待lua完成。在我的示例中,我在位置x=100和y=200以每毫秒1次点击的速度“模拟”500次鼠标点击 #包括 #包括 结构鼠标点击{ 卢厄州*L; int x,y; }; 整型睡眠(lua_状态*L) { 睡眠(lua_tointeger(L,1)); 返回0; } void onClicK(lua_State*L,int x,int y) { lua_

以下代码每次在不同的部分由于不同的原因崩溃。什么都试过了。我希望能够从lua脚本调用“sleep”,并多次调用lua函数,而无需我的C程序等待lua完成。在我的示例中,我在位置
x=100
y=200
以每毫秒1次点击的速度“模拟”500次鼠标点击

#包括
#包括
结构鼠标点击{
卢厄州*L;
int x,y;
};
整型睡眠(lua_状态*L)
{
睡眠(lua_tointeger(L,1));
返回0;
}
void onClicK(lua_State*L,int x,int y)
{
lua_getglobal(L,“onClick”);
新表(L);
lua_pushinteger(L,x);lua_setfield(L,-2,“x”);
lua_pushinteger(L,y);lua_setfield(L,-2,“y”);
lua_pcall(L,1,0,0);
}
无效调用线程(LPVOID arg)
{
MouseClick*m=(MouseClick*)arg;
单击(m->L,m->x,m->y);
}
int main()
{
lua_State*L=luaL_newstate();
if(luaL_加载文件(L,“test.lua”))
{
printf(“未加载脚本。\n”);
返回1;
}
luaL_openlibs(L);
lua_寄存器(L,“睡眠”,睡眠);
luaL_dofile(L,“test.lua”);
对于(inti=0;i<500;i++,睡眠(1))
{
MouseClick m={lua_newthread(L),100200};
CreateThread(0,0,(LPTHREAD\u START\u例程)callThread,&m,0,0);
}
getchar();
}
卢阿方面:

函数onClick(c)
印刷品(c.x,c.y)
睡眠(3000)
结束

Lua不支持多线程
lua\u newthread(L)
在同一全局lua状态内创建新的执行堆栈。WinAPI函数
CreateThread
创建新的OS线程,但全局Lua状态不是线程安全的(不允许从多个OS线程同时使用),这就是为什么会出现不可预测的错误。您应该使用
luaL\u newstate()
为每个OS线程创建单独的全局Lua状态,但在这种情况下,您的线程将不会有公共对象,它们将完全分离,并且不会看到彼此。存在一些外部库来解决此问题。谢谢,Egor。我想这可能是问题所在。你知道我可以用什么图书馆吗?