From 06132fc1dd0801e79460fb5d9ef8c3897e326974 Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Fri, 2 Jul 2021 15:46:37 -0400 Subject: [PATCH] Fixed rockspec for threading.lua, tweaking code --- changes.md | 10 +++++-- multi/init.lua | 7 +++-- multi/integration/lovrManager/extensions.lua | 16 +++++------ multi/integration/lovrManager/init.lua | 18 ++++++------ multi/integration/lovrManager/threads.lua | 30 ++++++++++---------- rockspecs/multi-15.0-0.rockspec | 2 +- rockspecs/multi-15.1-0.rockspec | 6 ++-- 7 files changed, 48 insertions(+), 41 deletions(-) diff --git a/changes.md b/changes.md index aba1cd0..9ec603a 100644 --- a/changes.md +++ b/changes.md @@ -1,9 +1,9 @@ # Changelog Table of contents --- -[Update 15.0.0 - The art of faking it](#update-1500---the-art-of-faking-it)
[Update 14.2.0 - Bloatware Removed](#update-1420---bloatware-removed)
[Update 14.1.0 - A whole new world of possibilities](#update-1410---a-whole-new-world-of-possibilities)
[Update 14.0.0 - Consistency, Additions and Stability](#update-1400---consistency-additions-and-stability)
[Update 13.1.0 - Bug fixes and features added](#update-1310---bug-fixes-and-features-added)
[Update 13.0.0 - Added some documentation, and some new features too check it out!](#update-1300---added-some-documentation-and-some-new-features-too-check-it-out)
[Update 12.2.2 - Time for some more bug fixes!](#update-1222---time-for-some-more-bug-fixes)
[Update 12.2.1 - Time for some bug fixes!](#update-1221---time-for-some-bug-fixes)
[Update 12.2.0 - The chains of binding](#update-1220---the-chains-of-binding)
[Update 12.1.0 - Threads just can't hold on anymore](#update-1210---threads-just-cant-hold-on-anymore)
[Update: 12.0.0 - Big update (Lots of additions some changes)](#update-1200---big-update-lots-of-additions-some-changes)
[Update: 1.11.1 - Small Clarification on Love](#update-1111---small-clarification-on-love)
[Update: 1.11.0](#update-1110)
[Update: 1.10.0](#update-1100)
[Update: 1.9.2](#update-192)
[Update: 1.9.1 - Threads can now argue](#update-191---threads-can-now-argue)
[Update: 1.9.0](#update-190)
[Update: 1.8.7](#update-187)
[Update: 1.8.6](#update-186)
[Update: 1.8.5](#update-185)
[Update: 1.8.4](#update-184)
[Update: 1.8.3 - Mainloop recieves some needed overhauling](#update-183---mainloop-recieves-some-needed-overhauling)
[Update: 1.8.2](#update-182)
[Update: 1.8.1](#update-181)
[Update: 1.7.6](#update-176)
[Update: 1.7.5](#update-175)
[Update: 1.7.4](#update-174)
[Update: 1.7.3](#update-173)
[Update: 1.7.2](#update-172)
[Update: 1.7.1 - Bug Fixes Only](#update-171---bug-fixes-only)
[Update: 1.7.0 - Threading the systems](#update-170---threading-the-systems)
[Update: 1.6.0](#update-160)
[Update: 1.5.0](#update-150)
[Update: 1.4.1 (4/10/2017) - First Public release of the library](#update-141-4102017---first-public-release-of-the-library)
[Update: 1.4.0 (3/20/2017)](#update-140-3202017)
[Update: 1.3.0 (1/29/2017)](#update-130-1292017)
[Update: 1.2.0 (12.31.2016)](#update-120-12312016)
[Update: 1.1.0](#update-110)
[Update: 1.0.0](#update-100)
[Update: 0.6.3](#update-063)
[Update: 0.6.2](#update-062)
[Update: 0.6.1-6](#update-061-6)
[Update: 0.5.1-6](#update-051-6)
[Update: 0.4.1](#update-041)
[Update: 0.3.0 - The update that started it all](#update-030---the-update-that-started-it-all)
[Update: EventManager 2.0.0](#update-eventmanager-200)
[Update: EventManager 1.2.0](#update-eventmanager-120)
[Update: EventManager 1.1.0](#update-eventmanager-110)
[Update: EventManager 1.0.0 - Error checking](#update-eventmanager-100---error-checking)
[Version: EventManager 0.0.1 - In The Beginning things were very different](#version-eventmanager-001---in-the-beginning-things-were-very-different) +[Update 15.1.0 - Hold the thread!](#update-1510---hold-the-thread)
[Update 15.0.0 - The art of faking it](#update-1500---the-art-of-faking-it)
[Update 14.2.0 - Bloatware Removed](#update-1420---bloatware-removed)
[Update 14.1.0 - A whole new world of possibilities](#update-1410---a-whole-new-world-of-possibilities)
[Update 14.0.0 - Consistency, Additions and Stability](#update-1400---consistency-additions-and-stability)
[Update 13.1.0 - Bug fixes and features added](#update-1310---bug-fixes-and-features-added)
[Update 13.0.0 - Added some documentation, and some new features too check it out!](#update-1300---added-some-documentation-and-some-new-features-too-check-it-out)
[Update 12.2.2 - Time for some more bug fixes!](#update-1222---time-for-some-more-bug-fixes)
[Update 12.2.1 - Time for some bug fixes!](#update-1221---time-for-some-bug-fixes)
[Update 12.2.0 - The chains of binding](#update-1220---the-chains-of-binding)
[Update 12.1.0 - Threads just can't hold on anymore](#update-1210---threads-just-cant-hold-on-anymore)
[Update: 12.0.0 - Big update (Lots of additions some changes)](#update-1200---big-update-lots-of-additions-some-changes)
[Update: 1.11.1 - Small Clarification on Love](#update-1111---small-clarification-on-love)
[Update: 1.11.0](#update-1110)
[Update: 1.10.0](#update-1100)
[Update: 1.9.2](#update-192)
[Update: 1.9.1 - Threads can now argue](#update-191---threads-can-now-argue)
[Update: 1.9.0](#update-190)
[Update: 1.8.7](#update-187)
[Update: 1.8.6](#update-186)
[Update: 1.8.5](#update-185)
[Update: 1.8.4](#update-184)
[Update: 1.8.3 - Mainloop recieves some needed overhauling](#update-183---mainloop-recieves-some-needed-overhauling)
[Update: 1.8.2](#update-182)
[Update: 1.8.1](#update-181)
[Update: 1.7.6](#update-176)
[Update: 1.7.5](#update-175)
[Update: 1.7.4](#update-174)
[Update: 1.7.3](#update-173)
[Update: 1.7.2](#update-172)
[Update: 1.7.1 - Bug Fixes Only](#update-171---bug-fixes-only)
[Update: 1.7.0 - Threading the systems](#update-170---threading-the-systems)
[Update: 1.6.0](#update-160)
[Update: 1.5.0](#update-150)
[Update: 1.4.1 (4/10/2017) - First Public release of the library](#update-141-4102017---first-public-release-of-the-library)
[Update: 1.4.0 (3/20/2017)](#update-140-3202017)
[Update: 1.3.0 (1/29/2017)](#update-130-1292017)
[Update: 1.2.0 (12.31.2016)](#update-120-12312016)
[Update: 1.1.0](#update-110)
[Update: 1.0.0](#update-100)
[Update: 0.6.3](#update-063)
[Update: 0.6.2](#update-062)
[Update: 0.6.1-6](#update-061-6)
[Update: 0.5.1-6](#update-051-6)
[Update: 0.4.1](#update-041)
[Update: 0.3.0 - The update that started it all](#update-030---the-update-that-started-it-all)
[Update: EventManager 2.0.0](#update-eventmanager-200)
[Update: EventManager 1.2.0](#update-eventmanager-120)
[Update: EventManager 1.1.0](#update-eventmanager-110)
[Update: EventManager 1.0.0 - Error checking](#update-eventmanager-100---error-checking)
[Version: EventManager 0.0.1 - In The Beginning things were very different](#version-eventmanager-001---in-the-beginning-things-were-very-different) -# Update 15.1.0 - Hold the ~~phone~~ thread +# Update 15.1.0 - Hold the thread! Full Update Showcase @@ -68,6 +68,10 @@ multi:mainloop() Added: --- +## multi.TIMEOUT + +`multi.TIMEOUT` is equal to "TIMEOUT", it is reccomended to use this incase things change later on. There are plans to change the timeout value to become a custom object instead of a string. + ## multi:newProcessor(name) ```lua @@ -125,6 +129,8 @@ Changed: | interval | Time between each poll | **Note:** cycles and sleep options cannot both be used at the same time. Cycles take priority if both are present! HoldFor and HoldWithin can be emulated using the new features. Old functions will remain for backward compatibility. + + Using cycles, sleep or interval will cause a timeout; returning nil, multi.TIMEOUT - `n` can be a number and thread.hold will act like thread.sleep. When `n` is a number the option table will be ignored! Removed: diff --git a/multi/init.lua b/multi/init.lua index f4c2c6a..53528d2 100644 --- a/multi/init.lua +++ b/multi/init.lua @@ -46,6 +46,7 @@ multi.clock = os.clock multi.time = os.time multi.LinkedPath = multi multi.lastTime = clock() +multi.TIMEOUT = "TIMEOUT" multi.Priority_Core = 1 multi.Priority_Very_High = 4 @@ -1108,7 +1109,7 @@ function multi.holdFor(n,func) if func() then return func() elseif temp then - return multi.NIL, "TIMEOUT" + return multi.NIL, multi.TIMEOUT end end) end @@ -1434,7 +1435,7 @@ function multi:attachScheduler() threads[i].task = "" threads[i].__ready = true t0 = nil - t1 = "TIMEOUT" + t1 = multi.TIMEOUT end threads[i].intervalR = clock() end @@ -1450,7 +1451,7 @@ function multi:attachScheduler() threads[i].task = "" threads[i].__ready = true t0 = nil - t1 = "TIMEOUT" + t1 = multi.TIMEOUT end threads[i].intervalR = clock() end diff --git a/multi/integration/lovrManager/extensions.lua b/multi/integration/lovrManager/extensions.lua index cbeecf3..5048cea 100644 --- a/multi/integration/lovrManager/extensions.lua +++ b/multi/integration/lovrManager/extensions.lua @@ -30,7 +30,7 @@ function multi:newSystemThreadedQueue(name) local fRef = {"func",nil} function c:init() local q = {} - q.chan = love.thread.getChannel(self.Name) + q.chan = lovr.thread.getChannel(self.Name) function q:push(dat) if type(dat) == "function" then fRef[2] = THREAD.dump(dat) @@ -76,9 +76,9 @@ function multi:newSystemThreadedJobQueue(n) c.cores = n or THREAD.getCores() c.registerQueue = {} c.funcs = THREAD.createStaticTable("__JobQueue_"..jqc.."_table") - c.queue = love.thread.getChannel("__JobQueue_"..jqc.."_queue") - c.queueReturn = love.thread.getChannel("__JobQueue_"..jqc.."_queueReturn") - c.queueAll = love.thread.getChannel("__JobQueue_"..jqc.."_queueAll") + c.queue = lovr.thread.getChannel("__JobQueue_"..jqc.."_queue") + c.queueReturn = lovr.thread.getChannel("__JobQueue_"..jqc.."_queueReturn") + c.queueAll = lovr.thread.getChannel("__JobQueue_"..jqc.."_queueAll") c.id = 0 c.OnJobCompleted = multi:newConnection() local allfunc = 0 @@ -138,16 +138,16 @@ function multi:newSystemThreadedJobQueue(n) for i=1,c.cores do multi:newSystemThread("JobQueue_"..jqc.."_worker_"..i,function(jqc) local multi, thread = require("multi"):init() - require("love.timer") + require("lovr.timer") local function atomic(channel) return channel:pop() end local clock = os.clock local funcs = THREAD.createStaticTable("__JobQueue_"..jqc.."_table") - local queue = love.thread.getChannel("__JobQueue_"..jqc.."_queue") - local queueReturn = love.thread.getChannel("__JobQueue_"..jqc.."_queueReturn") + local queue = lovr.thread.getChannel("__JobQueue_"..jqc.."_queue") + local queueReturn = lovr.thread.getChannel("__JobQueue_"..jqc.."_queueReturn") local lastProc = clock() - local queueAll = love.thread.getChannel("__JobQueue_"..jqc.."_queueAll") + local queueAll = lovr.thread.getChannel("__JobQueue_"..jqc.."_queueAll") local registry = {} setmetatable(_G,{__index = funcs}) multi:newThread("startUp",function() diff --git a/multi/integration/lovrManager/init.lua b/multi/integration/lovrManager/init.lua index 7db8e47..523382a 100644 --- a/multi/integration/lovrManager/init.lua +++ b/multi/integration/lovrManager/init.lua @@ -23,11 +23,11 @@ SOFTWARE. ]] -- TODO make compatible with lovr if ISTHREAD then - error("You cannot require the loveManager from within a thread!") + error("You cannot require the lovrManager from within a thread!") end local ThreadFileData = [[ ISTHREAD = true -THREAD = require("multi.integration.loveManager.threads") -- order is important! +THREAD = require("multi.integration.lovrManager.threads") -- order is important! sThread = THREAD __IMPORTS = {...} __FUNC__=table.remove(__IMPORTS,1) @@ -38,13 +38,13 @@ GLOBAL = THREAD.getGlobal() multi, thread = require("multi").init() stab["returns"] = {THREAD.loadDump(__FUNC__)(unpack(__IMPORTS))} ]] -local multi, thread = require("multi.compat.love2d"):init() +local multi, thread = require("multi.compat.lovr2d"):init() local THREAD = {} __THREADID__ = 0 __THREADNAME__ = "MainThread" multi.integration={} -multi.integration.love2d={} -local THREAD = require("multi.integration.loveManager.threads") +multi.integration.lovr2d={} +local THREAD = require("multi.integration.lovrManager.threads") local GLOBAL = THREAD.getGlobal() local THREAD_ID = 1 local OBJECT_ID = 0 @@ -68,7 +68,7 @@ function multi:newSystemThread(name,func,...) local c = {} c.name = name c.ID=THREAD_ID - c.thread=love.thread.newThread(ThreadFileData) + c.thread=lovr.thread.newThread(ThreadFileData) c.thread:start(THREAD.dump(func),c.ID,c.name,...) c.stab = THREAD.createStaticTable(name) GLOBAL["__THREAD_"..c.ID] = {ID=c.ID,Name=c.name,Thread=c.thread} @@ -76,13 +76,13 @@ function multi:newSystemThread(name,func,...) THREAD_ID=THREAD_ID+1 return c end -function love.threaderror(thread, errorstr) +function lovr.threaderror(thread, errorstr) print("Thread error!\n"..errorstr) end multi.integration.GLOBAL = GLOBAL multi.integration.THREAD = THREAD -require("multi.integration.loveManager.extensions") -print("Integrated Love Threading!") +require("multi.integration.lovrManager.extensions") +print("Integrated lovr Threading!") return {init=function() return GLOBAL,THREAD end} \ No newline at end of file diff --git a/multi/integration/lovrManager/threads.lua b/multi/integration/lovrManager/threads.lua index e133f31..b373136 100644 --- a/multi/integration/lovrManager/threads.lua +++ b/multi/integration/lovrManager/threads.lua @@ -22,9 +22,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] -- TODO make compatible with lovr -require("love.timer") -require("love.system") -require("love.data") +require("lovr.timer") +require("lovr.system") +require("lovr.data") local socket = require("socket") local multi, thread = require("multi").init() local threads = {} @@ -32,7 +32,7 @@ function threads.loadDump(d) return loadstring(d:getString()) end function threads.dump(func) - return love.data.newByteData(string.dump(func)) + return lovr.data.newByteData(string.dump(func)) end local fRef = {"func",nil} local function manage(channel, value) @@ -56,11 +56,11 @@ end local GNAME = "__GLOBAL_" local proxy = {} function threads.set(name,val) - if not proxy[name] then proxy[name] = love.thread.getChannel(GNAME..name) end + if not proxy[name] then proxy[name] = lovr.thread.getChannel(GNAME..name) end proxy[name]:performAtomic(manage, val) end function threads.get(name) - if not proxy[name] then proxy[name] = love.thread.getChannel(GNAME..name) end + if not proxy[name] then proxy[name] = lovr.thread.getChannel(GNAME..name) end local dat = proxy[name]:peek() if type(dat)=="table" and dat[1]=="func" then return THREAD.loadDump(dat[2]) @@ -75,7 +75,7 @@ function threads.waitFor(name) end) end while threads.get(name)==nil do - love.timer.sleep(.001) + lovr.timer.sleep(.001) end local dat = threads.get(name) if type(dat) == "table" and dat.init then @@ -90,7 +90,7 @@ function threads.package(name,val) val.init=init end function threads.getCores() - return love.system.getProcessorCount() + return lovr.system.getProcessorCount() end function threads.kill() error("Thread Killed!") @@ -112,7 +112,7 @@ function threads.getID() return __THREADID__ end function threads.sleep(n) - love.timer.sleep(n) + lovr.timer.sleep(n) end function threads.getGlobal() return setmetatable({}, @@ -129,11 +129,11 @@ end function threads.createTable(n) local _proxy = {} local function set(name,val) - if not _proxy[name] then _proxy[name] = love.thread.getChannel(n..name) end + if not _proxy[name] then _proxy[name] = lovr.thread.getChannel(n..name) end _proxy[name]:performAtomic(manage, val) end local function get(name) - if not _proxy[name] then _proxy[name] = love.thread.getChannel(n..name) end + if not _proxy[name] then _proxy[name] = lovr.thread.getChannel(n..name) end local dat = _proxy[name]:peek() if type(dat)=="table" and dat[1]=="func" then return THREAD.loadDump(dat[2]) @@ -154,7 +154,7 @@ function threads.createTable(n) end function threads.getConsole() local c = {} - c.queue = love.thread.getChannel("__CONSOLE__") + c.queue = lovr.thread.getChannel("__CONSOLE__") function c.print(...) c.queue:push{...} end @@ -167,7 +167,7 @@ end if not ISTHREAD then local clock = os.clock local lastproc = clock() - local queue = love.thread.getChannel("__CONSOLE__") + local queue = lovr.thread.getChannel("__CONSOLE__") multi:newThread("consoleManager",function() while true do thread.yield() @@ -186,14 +186,14 @@ function threads.createStaticTable(n) local __proxy = {} local function set(name,val) if __proxy[name] then return end - local chan = love.thread.getChannel(n..name) + local chan = lovr.thread.getChannel(n..name) if chan:getCount()>0 then return end chan:performAtomic(manage, val) __proxy[name] = val end local function get(name) if __proxy[name] then return __proxy[name] end - local dat = love.thread.getChannel(n..name):peek() + local dat = lovr.thread.getChannel(n..name):peek() if type(dat)=="table" and dat[1]=="func" then __proxy[name] = THREAD.loadDump(dat[2]) return __proxy[name] diff --git a/rockspecs/multi-15.0-0.rockspec b/rockspecs/multi-15.0-0.rockspec index 9dee9ed..1f3d52c 100644 --- a/rockspecs/multi-15.0-0.rockspec +++ b/rockspecs/multi-15.0-0.rockspec @@ -22,7 +22,7 @@ build = { modules = { ["multi"] = "multi/init.lua", ["multi.compat.love2d"] = "multi/compat/love2d.lua", - ["multi.integration"] = "multi/integration/threading.lua", + ["multi.integration.threading"] = "multi/integration/threading.lua", ["multi.integration.lanesManager"] = "multi/integration/lanesManager/init.lua", ["multi.integration.lanesManager.extensions"] = "multi/integration/lanesManager/extensions.lua", ["multi.integration.lanesManager.threads"] = "multi/integration/lanesManager/threads.lua", diff --git a/rockspecs/multi-15.1-0.rockspec b/rockspecs/multi-15.1-0.rockspec index b3d9cca..f803bb6 100644 --- a/rockspecs/multi-15.1-0.rockspec +++ b/rockspecs/multi-15.1-0.rockspec @@ -2,13 +2,13 @@ package = "multi" version = "15.1-0" source = { url = "git://github.com/rayaman/multi.git", - tag = "v15.1.0", + tag = "V15.1.0", } description = { summary = "Lua Multi tasking library", detailed = [[ This library contains many methods for multi tasking. Features non coroutine based multi-tasking, coroutine based multi-tasking, and system threading (Requires use of an integration). - Check github for how to use. + Check github for documentation. ]], homepage = "https://github.com/rayaman/multi", license = "MIT" @@ -23,7 +23,6 @@ build = { ["multi"] = "multi/init.lua", ["multi.compat.love2d"] = "multi/compat/love2d.lua", ["multi.compat.lovr"] = "multi/compat/lovr.lua", - ["multi.integration"] = "multi/integration/threading.lua", ["multi.integration.lanesManager"] = "multi/integration/lanesManager/init.lua", ["multi.integration.lanesManager.extensions"] = "multi/integration/lanesManager/extensions.lua", ["multi.integration.lanesManager.threads"] = "multi/integration/lanesManager/threads.lua", @@ -37,6 +36,7 @@ build = { ["multi.integration.pesudoManager.extensions"] = "multi/integration/pesudoManager/extensions.lua", ["multi.integration.pesudoManager.threads"] = "multi/integration/pesudoManager/threads.lua", ["multi.integration.luvitManager"] = "multi/integration/luvitManager.lua", + ["multi.integration.threading"] = "multi/integration/threading.lua", --["multi.integration.networkManager"] = "multi/integration/networkManager.lua", } } \ No newline at end of file