Time-related functions for Lua, inspired in javascript's setTimeout and setInterval
Go to file
Enrique García 2a1ad28c94 Merge pull request #2 from hahawoo/master
A few changes!
2012-10-22 14:56:11 -07:00
spec A few minor changes 2012-10-22 20:27:49 +11:00
cron.lua A few minor changes 2012-10-22 20:27:49 +11:00
MIT-LICENSE.txt changed license to MIT 2012-01-19 23:15:30 +01:00
README.textile Edited README.textile via GitHub 2011-04-25 11:47:58 -07:00

h1. cron.lua

@cron.lua@ are a set of functions for executing actions at a certain time interval.

h1. Examples of use

* @cron.after(time, callback)@ will execute callback after the given amount of time units. Returns an identifier (@id@)
* @cron.every(time, callback)@ will repeat the same action periodically. Returns an identifier (@id@)
* @cron.cancel(id)@ will stop a timed action from happening, and will interrupt the periodical execution of a periodic action.
* @cron.reset()@ removes all timed and periodic actions, and resets the time passed back to 0.
* @cron.update(dt)@ is needed to be executed on the main program loop. @dt@ is the amount of time that has passed since the last iteration. When @cron.update@ is executed, cron will check the list of pending actions and execute them if needed.

<pre>
local cron = require 'cron'

local function printMessage()
  print('Hello')
end

-- the following calls are equivalent:
cron.after(5, printMessage)
cron.after(5, print, 'Hello')

cron.update(5) -- will print 'Hello' twice

-- this will print the message periodically:
local id = cron.every(10, printMessage)

cron.update(5) -- nothing
cron.update(4) -- nothing
cron.update(12) -- prints 'Hello' twice

cron.cancel(id) -- stops the execution the element defined by id. Works with periodical or one-time actions.

cron.reset() -- stops all the current actions, both timed ones and periodical ones.
</pre>


h1. Gotchas / Warnings

* @cron.lua@ does *not* implement any hardware or software clock; you will have to provide it with the access to the hardware timers, in the form of periodic calls to @cron.update@
* @cron@ does not have any defined time units (seconds, milliseconds, etc). You define the units it uses by passing it a @dt@ on @cron.update@. If @dt@ is in seconds, then @cron@ will work in seconds. If @dt@ is in milliseconds, then @cron@ will work in milliseconds.

h1. Installation

Just copy the cron.lua file somewhere in your projects (maybe inside a /lib/ folder) and require it accordingly.

Remember to store the value returned by require somewhere! (I suggest a local variable named @cron@)

<pre>
local cron = require 'cron'
</pre>

Also, make sure to read the license file; the text of that license file must appear somewhere in your projects' files.

h1. Specs

This project uses "telescope":https://github.com/norman/telescope for its specs. If you want to run the specs, you will have to install telescope first. Then just enter the spec folder and execute run.lua:

<pre>
cd path/to/cron.lua/specs
lua run.lua
</pre>