让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

2024-01-04

我不知道如何让 lua 执行任何常见的计时技巧,例如

  • sleep - 停止线程上的所有操作

  • 暂停/等待 - 不要继续下一个 命令,但允许其他代码 申请继续

  • 阻止 - 不要继续执行下一个命令,直到 当前返回

我读过

while os.clock()<time_point do 
--nothing
end

占用CPU时间。

有什么建议么?我是否缺少 API 调用?

UPDATE:我很久以前就写了这个问题,试图让 WOW Lua 按计划重播动作(即站立、等待 1 秒、跳舞、等待 2 秒、坐下。没有停顿,这些几乎都在同一四分之一秒内发生。)事实证明,WOW 故意禁用了几乎所有允许在时钟上执行操作的功能,因为它可能会破坏游戏或启用机器人。 https://stackoverflow.com/questions/1024960/how-do-you-make-a-combo-of-two-emotes-in-lua-in-world-of-warcraft-work?lq=1我想在时钟被拿走后重新创建一个时钟,我必须做一些疯狂的事情,比如创建一个工作数组(带有操作和执行时间),然后在一堆常见事件上注册一个事件处理程序,例如鼠标移动,然后在事件处理程序中处理任何到了时间的操作。事件处理程序实际上不会每 X 毫秒发生一次,但如果每 2-100 毫秒发生一次,那就足够接近了。遗憾的是我从未尝试过。


[我本来打算将此作为评论发布约翰·克罗马蒂 https://stackoverflow.com/questions/1034334/easiest-way-to-make-lua-script-wait-pause-sleep-block-for-a-few-seconds/1034394#1034394帖子,但没有意识到您不能在评论中使用格式。]

我同意。使用 os.execute() 将其放入 shell 肯定会起作用,但一般来说,进行 shell 调用的成本很高。包装一些 C 代码在运行时会快得多。在 Linux 系统上的 C/C++ 中,您可以使用:

static int lua_sleep(lua_State *L)
{
    int m = static_cast<int> (luaL_checknumber(L,1));
    usleep(m * 1000); 
    // usleep takes microseconds. This converts the parameter to milliseconds. 
    // Change this as necessary. 
    // Alternatively, use 'sleep()' to treat the parameter as whole seconds. 
    return 0;
}

然后,在 main 中执行以下操作:

lua_pushcfunction(L, lua_sleep);
lua_setglobal(L, "sleep");

其中“L”是你的 lua_State。然后,在从 C/C++ 调用的 Lua 脚本中,您可以通过调用以下命令来使用您的函数:

sleep(1000) -- Sleeps for one second
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法? 的相关文章

  • Lua:冒号符号、“自我”和函数定义与调用

    我对定义 调用 Lua 函数时使用的冒号表示法感到非常困惑 我以为我已经明白了 直到我看到这段代码 function string PatternSafe str return str gsub pattern escape replace
  • 循环直到在表中找到 2 个特定值?

    我试图找到一种更聪明的方法来解决这个问题 这是与游戏相关的代码的摘录 它循环遍历每个背包的每个插槽 直到找到铲子和绳子 local continue local foundShovel foundRope for i 0 Container
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 为什么 LuaJIT 和 Lua 中的数字舍入格式不同?

    Using string format 据说遵循 Csprintf 在 LuaJIT 轮次中格式化数字与我尝试过的所有其他 Lua 解释器不同 lua v Lua 5 4 1 Copyright C 1994 2020 Lua org PU
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • Lua :: 如何编写加载多个CPU的简单程序?

    我还无法用 Lua 编写一个可以加载多个 CPU 的程序 自从Lua通过协程支持这个概念 http www lua org pil 9 4 html 我相信这是可以实现的 我失败的原因可能是以下之一 这在Lua中是不可能的 我写不出来 an
  • 如何在Conky中实现一个基本的Lua功能?

    我正在尝试向我的 Conky 添加一个函数 该函数打印字符串的长度以用于调试目的 代码位于名为的文件内test lua 非常简单 function test word return string len word end 我这样加载它 在我
  • Lua中如何获取表中的最大整数?

    Lua中如何获取表中的最大整数 在Lua 5 1及更早版本中 你可以使用 math max unpack 1 2 3 4 5 这受到Lua堆栈大小的限制 在 PUC Lua 5 1 上 该值的最大值可达 ca 8000 个数字 如果堆栈空闲
  • Lua 从 5.1 更新 - LUA_GLOBALSINDEX 问题

    我最近将旧的 Lua 5 1 项目更新到了该库的最新版本 但遇到了问题LUA GLOBALSINDEX 它变得不确定 我只用过它lua getfield函数 像这样 void luastartgame void if startgamefu
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • Lua 访问表的键和值

    我想在关卡编辑器中读取 Lua 文件 这样我就可以以可视化格式显示其数据供用户编辑 如果我有一个像这样的 Lua 表 properties Speed 10 TurnSpeed 5 Speed显然是关键并且10价值 我知道如果我知道像这样的
  • 如何从 Lua 内部运行另一个脚本?

    我需要从另一个 Lua 脚本中执行一个 Lua 脚本 有多少种方法 我该如何使用它们 通常您会使用以下内容 dofile filename lua 但你可以通过以下方式做到这一点require 很好 例子 foo lua io write
  • 云到设备 Azure IoT REST API

    我探索了如何使用 Azure REST API 将数据从设备发送到云 它运行无缝 没有任何问题 我没有找到有关使用 Azure IoT Hub REST API 向 Arduino 板发送云到设备消息的好文章 有人可以就此提供建议吗 您还可
  • 从命令行运行 vlc 扩展

    我有一个用 Lua 编写的 vlc 扩展 我知道如何从 GUI 运行它 查看 gt 我的扩展 我想从命令行运行它 这样我就不需要每次都启动X 它还没有实施 查看门票 3883 https trac videolan org vlc tick
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • 模式 ^u.meta(\.|$) 未按预期工作

    我有这个模式 u meta 预期行为 u meta 将匹配所有角色 例如 u meta u meta admin u meta admin system u meta 它不应该匹配如下所示的内容 u meta admin u meta ad
  • Linq 是如何工作的(在幕后)?

    我正在考虑为 Lua 制作类似 Linq 的东西 并且我大致了解 Linq 的工作原理 但想知道是否有一篇好文章 或者是否有人可以解释 C 如何使 Linq 成为可能 注意 我的意思是在幕后 比如它如何生成代码绑定等等 而不是最终用户语法
  • lua-socket:unix 域套接字?

    我使用的是 lua socket 3 0rc1 3 Ubuntu Trusty 附带的 和 lua 5 1 我正在尝试监听 unix 域套接字 我能找到的唯一示例代码是this http lua users org lists lua l

随机推荐

  • 为什么在枚举类中阻止默认序列化[重复]

    这个问题在这里已经有答案了 我一直在网络上搜索一些与java中枚举类相关的查询的答案 我的疑问是为什么枚举类中默认的反序列化被阻止 我可以看到枚举类实现了 Serialized 接口 但它也有以下 2 个方法 private void re
  • CSS按钮按下效果[重复]

    这个问题在这里已经有答案了 我有一个带有框阴影的按钮 使其看起来像是浮动的 我想在单击它时产生按压效果 代码 CSS startBtn font family OpenSans color FFFFFF background color 0
  • 获取“最佳”lambda 处的 glmnet 系数

    我在 glmnet 中使用以下代码 gt library glmnet gt fit glmnet as matrix mtcars 1 mtcars 1 gt plot fit xvar lambda 然而 我想打印出最好的 Lambda
  • 正则表达式删除ruby中url的网页部分

    我正在尝试删除 URL 的网页部分 例如 www example com home index html to www example com home 任何帮助表示赞赏 Thanks 尽可能不使用正则表达式可能是个好主意 你可以召唤克苏鲁
  • 当用户离开页面时在 angularjs 中显示警报

    我是 AngularJS 的新蜜蜂 我正在尝试编写一个验证 当用户尝试关闭浏览器窗口时提醒用户 我的页面 v1 和 v2 上有 2 个链接 单击链接时 它会转到特定页面 这是重定向到 v1 和 v2 的代码 angular module m
  • 如何在迭代时从列表中删除项目?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我正在迭代 Python 中的元组列表 并尝试在它们满足某些条件时将其删除 for tu
  • Hibernate ManyToMany 在更新时出现连接表问题

    我正在尝试使 ManyToMany 关联适用于所有 CRUD 操作 我有两个实体 Places and Events 一个地方可以举办多个活动 一个活动可以在多个地方举行 在第一种情况下我有 在 PlaceDto 类中 ManyToOne
  • 更新mysql中的序列化数组(不进行反序列化?)

    我读过的所有内容都说在 Mysql 中存储序列化数组是一个坏主意 我已经知道了 不幸的是 我正在使用使用此方法的开源脚本 并且在这种情况下更改结构不是一个选项 是否可以在不先反序列化的情况下更新此 URL 我最初尝试使用替换 但它抛出一个错
  • nio中服务器不接受多个客户端

    我正在尝试构建一个聊天应用程序 我有一个将数据从客户端发送到服务器的代码 当一个或多个客户端登录时 当客户端程序运行一次或多次时 服务器将不接受除第一次连接之外的其余连接 请帮我解决这个问题 这是我的代码 public class Serv
  • JavaScript 不加载 WordPress 页脚

    我最近开始学习Javascript 我正在尝试将一个小脚本添加到我的 WordPress 网站页面的页脚中 我正在使用 插入页眉和页脚 插件 但是 该脚本似乎未加载 我不认为这是语法问题 因为类似的脚本可以在不同的站点上运行 但是 我无法弄
  • 如何解决android中添加内容之前必须调用requestFeature()

    我正在创建一个应用程序 其中包含当我们单击按钮时在警报对话框中弹出的简单而小的注册表单 但它显示了一个名为的错误android util AndroidRuntimeException 添加内容之前必须调用 requestFeature 请
  • Go 中的 var 与 :=

    在此处的 Go Web 服务器示例中 http golang org doc effective go html web server http golang org doc effective go html web server 以下代
  • 同一 Ubuntu 机器上的多个 Python 版本

    我在 Ubuntu 机器上 自动安装了 Python 3 10 为了在共享代码库中执行给定任务 我需要使用 Python 3 9 来解决新版本的一些问题 我希望在我的机器上安装这两个Python 并且能够使用这两个Python 并在需要时进
  • Xcode4 显示所有输出(删除“仅显示前 200 个通知”)

    Apple在Xcode4最新版本中添加了新bug 如果输出超过200行 则全部删除 显然 如果有输出 那么它的存在是有原因的 我需要看到它 我尝试寻找首选项 GUI 或按钮 但找不到任何内容 他们肯定没有对其进行硬编码以防止您看到自己的输出
  • 使用 Node.js 进行 SOAP 请求

    嗨 任何人都可以帮助我吗 如何请求 SOAP Web 服务并获取 xml 响应 塞纳里奥 使用soap ui 我发送带有用户名 密码身份验证的wsdl url 并且我还将发送soap xml数据 然后我会得到响应 如何使用 Nodejs 或
  • 如何将 Either 转换为 MonadThrow

    我有一个通过处理错误的函数Either funErrViaEither a gt Either SomeException b 我想在另一个应该更灵活并返回的函数中使用这个函数MonadThrow m funErrViaThrow Mona
  • JavaFX 冻结问题

    我正在摆弄 JavaFX API 由于某种原因 这个应用程序似乎在 看似 随机的时间后冻结了 它是一个制作红绿渐变图案的应用程序 并且有一个很酷的动画与之配合 当应用程序运行时 按 Enter 键 动画就会开始 一段时间后 就像我之前所说的
  • 如何在 gitignore 中使用条件

    我管理着几个pdf and graffle使用 git 生成文件 我想添加pdf仅当以下情况时才将文件存储到存储库graffle具有相同文件名的文件不存在 例如 G 只添加foo pdf and bar graffle进入目录中的存储库 l
  • 如何更改 wp7 中列表框项目的可见性属性?

    例如 有一个列表框
  • 让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

    我不知道如何让 lua 执行任何常见的计时技巧 例如 sleep 停止线程上的所有操作 暂停 等待 不要继续下一个 命令 但允许其他代码 申请继续 阻止 不要继续执行下一个命令 直到 当前返回 我读过 while os clock