簡體   English   中英

在 lua 中制作線程系統

[英]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 stopstart這樣的操作會在任務上設置標志,告訴塔斯克是否在主循環中恢復那個特定的協程。

你可以通過 C 來做到這一點。你也許可以使用LuaLanes 和 Linda 對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM