在lua中创建一个线程系统

时间:2014-04-09 20:41:45

标签: multithreading lua

所以我一直在使用协同程序一段时间,我在尝试制作我想要的东西时遇到了麻烦。我想要一个我可以访问objectivley创建对象作为任务或进程的类。我认为向你展示代码是无关紧要的,也不是我想要的。所以我只是想告诉你我想要的功能

local task1 = Tasker.newTask(function()
  while true do 
    print("task 1")
  end
end)

local task2 = Tasker.newTask(function()
  while true do 
    print("task 2")
  end
end)

task1:start()
task2:start()

这样我可以同时运行多个任务,我希望能够在运行时期间添加新任务。另外,我想要一种方法来停止任务,例如:

task2:stop()

但是我不希望stop命令完全删除任务实例,只是停止任务本身以便我可以调用

task2:start()

然后也许我可以使用命令删除它。

task2:delete()

这将非常有用,如果您需要更多信息,请向我们寻求帮助。我也在手机上发布了这个,所以可能存在拼写错误和格式化问题

2 个答案:

答案 0 :(得分:2)

Lua本身不支持操作系统线程,即抢先式多任务处理。

你可以使用协同程序来实现你自己的合作“线程”,但每个线程必须放弃控制权,然后才能做任何事情。

local task1 = Tasker.newTask(function()
  while true do 
    print("task 1")
    coroutine.yield()
  end
end)

local task2 = Tasker.newTask(function()
  while true do 
    print("task 2")
    coroutine.yield()
  end
end)

你的Tasker类必须接受任务函数并将其包装在协程中,然后在它们上面调用coroutine.resume。像stopstart这样的操作会在任务上设置标志,告诉Tasker是否在主循环中恢复该特定协程。

答案 1 :(得分:0)

您可以通过C执行此操作。您可以使用LuaLanes and Linda objects