中止一个无限的 DoString调用。
2017-5-23 12:13:19
收藏:0
阅读:238
评论:1
可能是重复问题:
这是一个针对 C#(Lua 接口)中的 Lua 特定问题,不适用于原生的 C Lua,请在回答问题之前三思而后行,谢谢。
问题是,如果用户提供了以下脚本,该怎么办才能干净地终止它,而不让 Lua 反咬一口?
while (true) do end
我试过很多方法,比如从另一个线程调用 lua.Close(),但它只会给出无保护的错误调用 Lua API (试图索引空值)的错误提示。问题的根源在于 Lua 不是线程安全的,并且由于我必须从另一个线程调用 close(主线程正忙于处理 DoString 调用),所以这是个棘手的问题。我尝试添加了一个调试钩子,并检查了 DoString 线程和钩子之间的线程 ID 是否相同,并且它们相同,因此在钩子中执行的任何内容都将在 DoString 线程上执行。但这仍然无济于事,仍然会出现异常。在 Lua C# 中,怎么才能中止 DoString 操作呢?
谢谢。
编辑
我有一些进展,如果我释放了 Lua 类,我就会在运行无限循环的 DoString 的线程中得到异常。在从 VStudio 的调试中我可以捕捉到这个错误并进行恢复。但是如果我以调试或发布运行 exe 文件,有时候就不能进行恢复,而会崩溃。我从 DoString 线程得到的错误提示是 试图读取或写入受保护的内存, 这常常是其他内存已经损坏的迹象。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
如何在 Lua C# 中取消 DoString?
无论是来自 C#、C、C++ 还是其他任何语言,Lua 不会因为你想要其停止而停止。它是固有的单线程,这意味着Lua脚本的执行将在返回时停止。而且,由于不允许在一个线程活动时从另一个线程调用 Lua 状态,因此你无法直接做太多事情。
Lua 并不是以这种方式使用的。
如果我释放 Lua 类
你不能在其运行时 dispose Lua 状态。如果从调试钩子中抛出异常无效,则你就无能为力。