diff --git a/docs/changes.md b/docs/changes.md index 49564f3..cde5e6e 100644 --- a/docs/changes.md +++ b/docs/changes.md @@ -204,6 +204,7 @@ Added Changed --- +- multi.OnObjectCreated is only called when an object is created in a particular process. Proc.OnObjectCreated is needed to detect when an object is created within a process. - multi.print shows "INFO" before it's message. - Connections internals changed, not too much changed on the surface. - newConnection(protect, func, kill) diff --git a/init.lua b/init.lua index 6870b9c..70c23e6 100644 --- a/init.lua +++ b/init.lua @@ -402,7 +402,7 @@ function multi:newConnection(protect, func, kill) end if not(ignoreconn) then - multi:create(c) + self:create(c) end return c @@ -638,7 +638,7 @@ function multi:newTimer() time=os.clock()-time return self end - multi:create(c) + self:create(c) return c end @@ -662,7 +662,7 @@ function multi:newEvent(task) c.OnEvent = self:newConnection():fastMode() self:setPriority("core") c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -684,7 +684,7 @@ function multi:newUpdater(skip) end c.OnUpdate = self:newConnection():fastMode() c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -721,7 +721,7 @@ function multi:newAlarm(set) return self end c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -744,7 +744,7 @@ function multi:newLoop(func,notime) c.OnLoop(func) end - multi:create(c) + self:create(c) c:setName(c.Type) return c end @@ -804,7 +804,7 @@ function multi:newStep(start,reset,count,skip) return self end c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -840,7 +840,7 @@ function multi:newTLoop(func,set) c.OnLoop(func) end c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -890,7 +890,7 @@ function multi:newTStep(start,reset,count,set) return self end c:setName(c.Type) - multi:create(c) + self:create(c) return c end @@ -979,6 +979,7 @@ function multi:newProcessor(name, nothread) c.threads = {} c.startme = {} c.parent = self + c.OnObjectCreated = multi:newConnection() local handler = c:createHandler(c) @@ -1449,7 +1450,7 @@ function thread:newThread(name, func, ...) globalThreads[c] = multi threadid = threadid + 1 - multi:create(c) + self:create(c) c.creationTime = os.clock() return c end @@ -2172,7 +2173,7 @@ function multi:IsAnActor() return self.Act~=nil end -function multi:reallocate(o,n) +function multi:reallocate(o, n) n=n or #o.Mainloop+1 local int=self.Parent self:Destroy() diff --git a/integration/priorityManager/init.lua b/integration/priorityManager/init.lua index ca5db00..9dd8e58 100644 --- a/integration/priorityManager/init.lua +++ b/integration/priorityManager/init.lua @@ -27,17 +27,12 @@ local uManagerRefP = multi.uManagerRefP1 -- self:setCurrentProcess() a bit slower than using the local var, but there isn't another option --- function multi:uManagerRef() --- if self.Active then --- self:setCurrentProcess() --- local Loop=self.Mainloop --- for _D=#Loop,1,-1 do --- __CurrentTask = Loop[_D] --- __CurrentTask:Act() --- self:setCurrentProcess() --- end --- end --- end +local priorityManager = multi:newProcessor("Priority Manager", true) + +local function processHook(obj, proc) + obj.__restoreProc = proc + obj:reallocate(priorityManager) +end local function init() local RR, PB, TB = 0, 1, 2 @@ -67,7 +62,12 @@ local function init() end local function init_chronos() - + multi:newThread("Priority Manager", function() + while true do + thread.yield() + priorityManager.run() + end + end) end if chronos then diff --git a/tests/test.lua b/tests/test.lua index abfa52c..d844fee 100644 --- a/tests/test.lua +++ b/tests/test.lua @@ -1,13 +1,5 @@ package.path = "../?/init.lua;../?.lua;"..package.path multi, thread = require("multi"):init{print=true,findopt=true} +require("multi.integration.priorityManager") -local conn1 = multi:newConnection() -local conn2 = function(a,b,c) return a*2, b*2, c*2 end % conn1 -conn2(function(a,b,c) - print("Conn2",a,b,c) -end) -conn1(function(a,b,c) - print("Conn1",a,b,c) -end) -conn1:Fire(1,2,3) -conn2:Fire(1,2,3) \ No newline at end of file +multi:mainloop() \ No newline at end of file