gpt4 book ai didi

从 C 更改 lua 变量

转载 作者:太空狗 更新时间:2023-10-29 14:58:47 25 4
gpt4 key购买 nike

我有一个主程序(在 C 中)需要分支到 lua_thread(主程序继续运行)。这个 lua_thread 调用一个 lua_script.lua。这个 lua_script 包含一个 while 循环。一个 lua 变量控制这个 while 循环。目前这个循环永远运行。

lua_script.lua

  --this loop runs forever, as the exit value is not set yet
a=0
while(a<=0)
do
print("value of a:", a)
end

我的目标是从主程序中更改此 lua 变量 (a),使其退出此无限循环。一旦这个循环结束,它就退出线程并返回到主程序。

主.c

#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
void *lua_thread()
{
int status, result;
double sum;
lua_State *L;

L = luaL_newstate();
luaL_openlibs(L);

status = luaL_loadfile(L, "lua_script.lua");
if (status)
{
fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));
exit(1);
}

result = lua_pcall(L, 0, 0, 0);
if (result) {
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
exit(1);
}

lua_close(L);
return 0;
}

int main(void)
{
pthread_t p1;
pthread_create(&p1,NULL,lua_thread,NULL);
pthread_join(p1,NULL);
return 0;
}

如果你运行上面的代码

cc -o xcute main.c  -I/usr/include/lua5.2 -llua -lm -ldl -pthread

会进入死循环。我想以某种方式控制lua变量并将其从主程序更改为a = 1,以便它脱离无限循环。之所以做这样的测试,是为了保证在主程序退出前,通过控制lua变量,本线程先退出。请建议如何更改此 lua 变量以使其退出 while 循环。

最佳答案

从不同的线程与正在运行的 lua 状态交互不一定安全,因此修改脚本的全局变量可能是也可能不是一个有用的想法,具体取决于您计划从 C 端进行更改的位置。

如果您想这样做,您只需使用 lua C api 在适当的 lua 状态下设置适当名称的全局变量。

另一种想法是创建一个 should_exit 全局函数,它在每个循环的开始或结束时被调用,当它返回 true 时导致 lua 代码 break返回。然后,此函数可以以任何适合线程的方式在 C 端检查它想要检查的任何内容。

关于从 C 更改 lua 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com