Sandbox: Lua: Threader - ov-studio/Vital.sandbox GitHub Wiki

» Overview

The primary goal of this module is to provide robust asynchronous operation handling, particularly in scenarios involving:

  • Concurrent execution of multiple heavy data processing tasks.
  • Preventing potential infinite loop scenarios.
  • Supporting advanced Async/Await functionality.

» Key Features

  • Enhanced performance for complex, data-intensive operations.
  • Improved concurrency management.
  • Streamlined asynchronous programming patterns. By implementing this approach, developers can efficiently manage and execute multiple tasks without blocking the main thread, ensuring responsive and scalable application performance.

» APIs

  • thread:getType() - shared

    Retrieve's instance's type.

    local string: type = self:getType()
    
  • thread:getThread() - shared

    Retrieve's current running thread.

    local thread: cThread = thread:getThread()
    
  • thread:create() - shared

    Creates a new thread. 💡 Altform: async()

    local thread: cThread = thread:create(
       function: exec
    )
    
  • thread:createHeartbeat() - shared

    Creates a new heartbeat. 💡 Altform: heartbeat()

    local thread: cThread = thread:createHeartbeat(
       function: conditionExec,
       function: exec,
       int = rate
    )
    
  • thread:createPromise() - shared

    Creates a new promise. 💡 Altform: promise()

    local promise: cPromise = thread:createPromise(
       function: callback(resolve, reject), --Optional: Thread instance is passed as param if Async is enabled; i.e, callback(cThread, resolve, reject)
       table: {
          isAsync = false, --Optional: Bool flag indicating whether the handle should be asynchronous
          timeout = 6000 --Optional: Timeout duration in milliseconds
       }
    )
    
    cPromise: {
       resolve = resolve(...),
       reject = reject(...)
    }
    
  • thread:destroy() - shared

    Destroys an existing thread.

    local bool: result = self:destroy()
    
  • thread:pause() - shared

    Pauses the current thread.

    local bool: result = thread:pause()
    
  • thread:status() - shared

    Retrieves the status of a specified thread.

    local string: status = self:status()
    
  • thread:resume() - shared

    Resumes a paused thread.

    • Syntax #1

      local bool: result = self:resume()
      
    • Syntax #2

      --Note: Use this when you need to repeatedly resume a thread
      local bool: result = self:resume(
         table: {
            int: executions = 1 --Number of executions per resume
            int: frames = 100 --Number of frames at which the the resume interval would run
         }
      )
      
  • thread:sleep() - shared

    Pauses the current thread for specified duration. 💡 Altform: sleep()

    local bool: result = self:sleep(
       int: duration --Duration in milliseconds
    )
    
  • thread:await() - shared

    Pauses the current thread & awaits the exec to be resolved. 💡 Altform: await()

    local bool: result = self:await(
       function: exec
    )
    
  • thread:try() - shared

    Safely executes provided handle while catching its exceptions. 💡 Altform: try()

    local ~: ...results = self:try(
       table: {
          exec = function(self)
             --Your codeblocks here
             return a, b, c
          end,
          catch = function(...)
             iprint(table.pack(...))
             return false
          end
       }
    )