diff options
author | Ronan Collobert <ronan@collobert.com> | 2015-03-11 20:49:11 +0300 |
---|---|---|
committer | Ronan Collobert <ronan@collobert.com> | 2015-03-11 20:49:11 +0300 |
commit | e2c733bc14a2fc665ce9f009b589cd65df84e53d (patch) | |
tree | 5962f940aae587462a7afb934e5657318f771140 /init.lua | |
parent | 3b8546b7a57ff276f341de4fbca0f02a55748733 (diff) |
added acceptsjob() and addjobasync()
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -136,13 +136,19 @@ function Threads:dojob() endcallbacks.n = endcallbacks.n - 1 end -function Threads:addjob(callback, endcallback, ...) -- endcallback is passed with returned values of callback +function Threads:acceptsjob() + return self.threadworker.isfull ~= 1 +end + +function Threads:__addjob__(sync, callback, endcallback, ...) -- endcallback is passed with returned values of callback if #self.errors > 0 then self:synchronize() end -- if errors exist, sync immediately. local endcallbacks = self.endcallbacks -- first finish running jobs if any - while self.endcallbacks.n > self.N do - self:dojob() + if sync then + while not self:acceptsjob() do + self:dojob() + end end -- now add a new endcallback in the list @@ -159,6 +165,14 @@ function Threads:addjob(callback, endcallback, ...) -- endcallback is passed wit self.threadworker:addjob(func, ...) end +function Threads:addjob(callback, endcallback, ...) + self:__addjob__(true, callback, endcallback, ...) +end + +function Threads:addjobasync(callback, endcallback, ...) + self:__addjob__(false, callback, endcallback, ...) +end + function Threads:synchronize() while self.mainworker.runningjobs > 0 or self.threadworker.runningjobs > 0 or self.endcallbacks.n > 0 do |