Operating system for OpenComputers
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

23 lines
513B

  1. tTasks,nPid,nTimeout,cPid = {},1,1,0
  2. function os.spawn(f,n)
  3. tTasks[nPid] = {["c"]=coroutine.create(f),["n"]=n,["p"]=nPid}
  4. for k,v in pairs(tTasks[cPid] or {}) do
  5. tTasks[nPid][k] = tTasks[nPid][k] or v
  6. end
  7. nPid = nPid + 1
  8. return nPid - 1
  9. end
  10. function sched()
  11. while #tTasks > 0 do
  12. local tEv = {computer.pullSignal(nTimeout)}
  13. for k,v in pairs(tTasks) do
  14. if coroutine.status(v.c) ~= "dead" then
  15. cPid = k
  16. coroutine.resume(v.c,table.unpack(tEv))
  17. else
  18. tTasks[k] = nil
  19. end
  20. end
  21. end
  22. end