gpt4 book ai didi

c - 如何获取lua脚本的执行百分比?

转载 作者:行者123 更新时间:2023-11-30 15:41:44 26 4
gpt4 key购买 nike

我在一个单独的任务中在 c 应用程序中运行 Lua 脚本,我添加了一个功能来检查正在运行的脚本的状态(如果它仍在运行或已完成)。

我想在运行脚本的情况下添加一些信息,我想添加从运行脚本执行的百分比,Lua是否支持此信息。

我尝试使用 Lua_debug 中报告的信息,但它看起来不正确(如 currentlin、defineline),我需要整个脚本的百分比,而不仅仅是特定函数的百分比。

最佳答案

您可以设置 debug hook并监听钩子(Hook)事件:

Ideone

local script = [[
print 'hello'
print 'world'
for i=0,3 do
local answer = 42
end
]]

local script_function = loadstring(script)

local function count_lines ()
local count = 0
for k,v in script:gmatch '\n' do count = count+1 end
return count
end

local function trace(total_lines)
local max_last_line = 0
return function(info,line_number)
if line_number > max_last_line then
print(tostring(line_number/total_lines*100)..'%')
max_last_line = line_number
end
end
end

local lines = count_lines()

local thread = coroutine.create( script_function )

debug.sethook(thread, trace(lines), "l")
coroutine.resume(thread)

输出:

20%
hello
40%
world
60%
80%
100%

但是,值得一提的是,从这样的进度报告中获得有意义的数字仍然相当困难 - 如果您组织代码并且最后唯一的语句是对某种 main 的调用,则进度将是 100 %,而这个数字并不代表任何有用的东西。您还可以跟踪线路并测量覆盖率,但自然地,在执行运行期间通常不会达到 100% 的覆盖率。您还可以尝试构建一个进度报告系统并调用类似的函数

ReportProgress( tasks / all_tasks )

它将绑定(bind)到 C 并生成必要的进度更新

关于c - 如何获取lua脚本的执行百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435001/

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