Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/threads-ffi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Collobert <ronan@collobert.com>2015-03-11 20:49:11 +0300
committerRonan Collobert <ronan@collobert.com>2015-03-11 20:49:11 +0300
commite2c733bc14a2fc665ce9f009b589cd65df84e53d (patch)
tree5962f940aae587462a7afb934e5657318f771140 /init.lua
parent3b8546b7a57ff276f341de4fbca0f02a55748733 (diff)
added acceptsjob() and addjobasync()
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua20
1 files changed, 17 insertions, 3 deletions
diff --git a/init.lua b/init.lua
index 715b7c8..55f7a69 100644
--- a/init.lua
+++ b/init.lua
@@ -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