From bbc83acc0f819e56415d0c2154837a84d7b877cd Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Sat, 10 Dec 2022 22:48:26 -0500 Subject: [PATCH] Modified changes --- docs/changes.md | 10 ++++++++-- init.lua | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/docs/changes.md b/docs/changes.md index 01f3019..a0a82d1 100644 --- a/docs/changes.md +++ b/docs/changes.md @@ -84,12 +84,18 @@ multi:mainloop() Added --- - `thread.chain(...)` allows you to chain `thread.hold(FUNCTIONs)` together - ``` + ```lua while true do thread.chain(hold_function_1, hold_function_2) end ``` - If the first function returns true, it moves on to the next one + If the first function returns true, it moves on to the next one. if expanded it follows: + ```lua + while true do + thread.hold(hold_function_1) + thread.hold(hold_function_2) + end + ``` - Experimental option to multi settings: `findopt`. When set to `true` it will print out a message when certain pattern are used with this library. For example if an anonymous function is used in thread.hold() within a loop. The library will trigger a message alerting you that this isn't the most performant way to use thread.hold(). - `multi:newSystemThreadedConnection()` diff --git a/init.lua b/init.lua index a3c3f54..74ef7f4 100644 --- a/init.lua +++ b/init.lua @@ -876,6 +876,32 @@ function multi:newTStep(start,reset,count,set) return c end +local tasks = {} +local _tasks = 0 + +local function _task_handler() + tasks[#tasks + 1] = func + _tasks = _tasks + 1 +end + +function multi:newTask(func) + multi:newThread("Task Handler",function() + while true do + thread.hold(function() + return _tasks > 1 + end) + for i=1,_tasks do + tasks[i]() + end + _tasks = 0 + end + end) + -- Re bind this method to use the one that doesn't init a thread! + multi.newTask = _task_handler + tasks[#tasks + 1] = func + _tasks = _tasks + 1 +end + local scheduledjobs = {} local sthread