gpt4 book ai didi

multithreading - 在lua中创建线程系统

转载 作者:行者123 更新时间:2023-12-03 13:00:18 26 4
gpt4 key购买 nike

因此,我与协程一起工作了一段时间,尝试做出自己想要的东西时遇到了一些麻烦。我想要一个可以访问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()

这将非常有帮助,如果您需要更多信息,请谢谢您的帮助。我也把这个贴在我的手机上,所以可能有错别字和格式问题

最佳答案

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

您可以使用协程来实现自己的协作“线程”,但是每个线程必须放弃控制权,然后另一个线程才能执行任何操作。

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类必须采用task函数并将其包装在协程中,然后注意在它们上调用 coroutine.resume。诸如 stopstart之类的操作将在任务上设置标志,以告知Tasker是否在主循环中恢复该特定协程。

关于multithreading - 在lua中创建线程系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973484/

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