Working on issue with love threaded functions not waiting when in a thread
This commit is contained in:
parent
6ed5555706
commit
22f1375380
3
init.lua
3
init.lua
@ -22,6 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
traceback = debug.traceback
|
||||||
|
|
||||||
local multi = {}
|
local multi = {}
|
||||||
local mainloopActive = false
|
local mainloopActive = false
|
||||||
local isRunning = false
|
local isRunning = false
|
||||||
@ -1615,6 +1617,7 @@ co_status = {
|
|||||||
else
|
else
|
||||||
ref.OnError:Fire(ref,ret,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16)
|
ref.OnError:Fire(ref,ret,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16)
|
||||||
end
|
end
|
||||||
|
print(ref.Name, traceback())
|
||||||
if i then
|
if i then
|
||||||
table.remove(th,i)
|
table.remove(th,i)
|
||||||
else
|
else
|
||||||
|
|||||||
@ -20,8 +20,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
]]
|
]] if ISTHREAD then
|
||||||
if ISTHREAD then
|
|
||||||
error("You cannot require the loveManager from within a thread!")
|
error("You cannot require the loveManager from within a thread!")
|
||||||
end
|
end
|
||||||
local ThreadFileData = [[
|
local ThreadFileData = [[
|
||||||
@ -62,18 +61,16 @@ function multi:newSystemThread(name,func,...)
|
|||||||
c.ID = THREAD_ID
|
c.ID = THREAD_ID
|
||||||
c.thread = love.thread.newThread(ThreadFileData)
|
c.thread = love.thread.newThread(ThreadFileData)
|
||||||
c.thread:start(THREAD.dump(func), c.ID, c.name, ...)
|
c.thread:start(THREAD.dump(func), c.ID, c.name, ...)
|
||||||
c.stab = THREAD.createStaticTable(name)
|
c.stab = THREAD.createStaticTable(name .. c.ID)
|
||||||
c.OnDeath = multi:newConnection()
|
c.OnDeath = multi:newConnection()
|
||||||
c.OnError = multi:newConnection()
|
c.OnError = multi:newConnection()
|
||||||
GLOBAL["__THREAD_" .. c.ID] = {ID = c.ID, Name = c.name, Thread = c.thread}
|
GLOBAL["__THREAD_" .. c.ID] = {ID = c.ID, Name = c.name, Thread = c.thread}
|
||||||
GLOBAL["__THREAD_COUNT"] = THREAD_ID
|
GLOBAL["__THREAD_COUNT"] = THREAD_ID
|
||||||
THREAD_ID = THREAD_ID + 1
|
THREAD_ID = THREAD_ID + 1
|
||||||
function c:getName()
|
function c:getName() return c.name end
|
||||||
return c.name
|
|
||||||
end
|
|
||||||
thread:newThread(function()
|
thread:newThread(function()
|
||||||
if name == "TempSystemThread" then
|
if name == "TempSystemThread" then
|
||||||
local status_channel = love.thread.getChannel("__"..c.ID.."__MULTI__STATUS_CHANNEL__")
|
local status_channel = love.thread.getChannel("STATCHAN_" .. c.ID)
|
||||||
thread.hold(function()
|
thread.hold(function()
|
||||||
-- While the thread is running we might as well do something in the loop
|
-- While the thread is running we might as well do something in the loop
|
||||||
local status = status_channel
|
local status = status_channel
|
||||||
@ -83,9 +80,7 @@ function multi:newSystemThread(name,func,...)
|
|||||||
return not c.thread:isRunning()
|
return not c.thread:isRunning()
|
||||||
end)
|
end)
|
||||||
else
|
else
|
||||||
thread.hold(function()
|
thread.hold(function() return not c.thread:isRunning() end)
|
||||||
return not c.thread:isRunning()
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
-- If the thread is not running let's handle that.
|
-- If the thread is not running let's handle that.
|
||||||
local thread_err = c.thread:getError()
|
local thread_err = c.thread:getError()
|
||||||
@ -117,6 +112,4 @@ multi.integration.GLOBAL = GLOBAL
|
|||||||
multi.integration.THREAD = THREAD
|
multi.integration.THREAD = THREAD
|
||||||
require("multi.integration.loveManager.extensions")
|
require("multi.integration.loveManager.extensions")
|
||||||
multi.print("Integrated Love Threading!")
|
multi.print("Integrated Love Threading!")
|
||||||
return {init=function()
|
return {init = function() return GLOBAL, THREAD end}
|
||||||
return GLOBAL,THREAD
|
|
||||||
end}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user