[英]Making a threading system in 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()
但我不希望停止命令完全刪除任務實例,只停止任務本身以便我可以調用
task2:start()
那么也許我可以使用命令來刪除它。
task2:delete()
這將非常有幫助,如果您需要更多信息,請詢問您的幫助。 我也把這個貼在我的手機上,所以可能會有拼寫錯誤和格式問題
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
。 像stop
和start
這樣的操作會在任務上設置標志,告訴塔斯克是否在主循環中恢復那個特定的協程。
你可以通過 C 來做到這一點。你也許可以使用LuaLanes 和 Linda 對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.