Lua - 多线程编程

在下面的代码中,我从设备读取值,为其添加时间戳,并通过电子邮件发送字符串。函数“send_email()”需要3分钟,并阻止其余代码的工作。 因此,我的目标是在另一个线程或类似的线程中执行函数“send_email()”,以便收集的数据集之间没有3分钟的间隙。因为在这段时间内不会收到新数据,但我需要收集全部数据。

它应该输出:value_10:30:00  - > value_10:30:10  - > value_10:30:20 ...
不是:value_10:30:00  - > value_10:33:10  - > value_10:36:20 ...

请注意,以下代码是伪代码。

``` 功能主()

时间= get_time() - 打印时钟时间(格式:小时,分钟,秒) mystring = read_value_from_device() mystring = mystring ..“_” ..时间

send_email(mystring) - 发送电子邮件(这需要最多3分钟!)

sleep(10) - 睡眠10秒

主() - 再次调用功能 内部

点赞
用户2328287
用户2328287

存在许多线程库(如 LuaLanes,lua-llthreads)。 我使用我的 lua-llthreads2/lua-lzmq。

local zthreads = require "lzmq.threads"

-- 创建一个具有新 Lua 状态的单独 OS 线程
local thread = zthreads.xactor(function(pipe)
  -----------------------------------------------------
  -- !!!不要使用主 Lua 状态中的 upvalues!!! --
  -----------------------------------------------------
  while true do
    -- 使用 pipe 获取下一个消息
    local msg = pipe:recv()
    if not msg then break end
    print("线程代码:", msg)
  end
end):start()

for i = 1, 10 do
  -- 向线程发送新消息
  thread:send("消息 #" .. i)
end

使用此代码,您还具有消息队列。 但是,如果您生成的消息比发送它们快,您最终会得到应用程序崩溃,没有内存错误。

2015-04-02 13:33:43