在下面的代码中,我从设备读取值,为其添加时间戳并通过电子邮件发送字符串。函数“send_email()”需要3分钟,并停止其余代码工作。 所以我的目标是在另一个线程或类似的线程上执行“send_email()”函数,这样收集的数据集之间就不会有3分钟的间隔。因为此时不会收到新数据,但我需要收集所有数据。
It should give out: value_10:30:00 -> value_10:30:10 -> value_10:30:20...
not: value_10:30:00 -> value_10:33:10 -> value_10:36:20...
请注意,以下代码是伪代码。
function main()
time = get_time() --prints the clocktime (format: hour, minutes, seconds)
mystring = read_value_from_device()
mystring = mystring .. "_" .. time
send_email(mystring) --send email (this takes up to 3 minutes!)
sleep(10) --sleeps 10 seconds
main() --call function again
end
答案 0 :(得分:1)
存在许多线程库(LuaLanes,lua-llthreads) 我用我的lua-llthreads2 / lua-lzmq
local zthreads = require "lzmq.threads"
-- Create separate OS thread with new Lua state
local thread = zthreads.xactor(function(pipe)
-----------------------------------------------------
-- !!! DO NOT USE UPVALUES FROM MAIN LUA STATE !!! --
-----------------------------------------------------
while true do
-- use pipe to get next message
local msg = pipe:recv()
if not msg then break end
print("Thread code:", msg)
end
end):start()
for i = 1, 10 do
-- send new message to thread
thread:send("Message #" .. i)
end
使用此代码,您还可以拥有邮件队列。 但是,如果您生成的消息比发送消息更快,则最终导致应用程序崩溃而没有内存错误。