Skip to content

Instantly share code, notes, and snippets.

@d-led
Created December 21, 2017 09:35
Show Gist options
  • Save d-led/a92c1e4aa51b87f587976995d397dbcb to your computer and use it in GitHub Desktop.
Save d-led/a92c1e4aa51b87f587976995d397dbcb to your computer and use it in GitHub Desktop.
use "time"
use "collections"
class Tick is TimerNotify
let _env : Env
var _counter: U64 = 0
new iso create(env: Env) =>
_env = env
fun ref _next(): String =>
_counter = _counter + 1
_counter.string()
fun ref apply(timer: Timer, count: U64): Bool =>
_env.out.print("Tick "+_next())
true
actor Loader
var _counter: U64 = 0
let _env : Env
new create(env: Env) =>
_env = env
be spin() =>
_spin()
fun ref _spin() =>
while _counter >= 0 do
_counter = _counter + 1
end
_env.out.print(_counter.string())
class Load is TimerNotify
let _env : Env
let _loaders: List[Loader] = List[Loader]
var _counter: U64 = 0
new iso create(env: Env) =>
_env = env
fun ref _next() =>
_counter = _counter + 1
_env.out.print("Started task "+_counter.string())
let l = Loader(_env)
_loaders.push(l)
l.spin()
fun ref apply(timer: Timer, count: U64): Bool =>
_next()
true
actor Main
new create(env: Env) =>
let timers = Timers
let timer = Timer(Tick(env), 0, 1_000_000_000 /*1s*/)
timers(consume timer)
env.out.print("Started the ticker")
let load_timer = Timer(Load(env), 0, 2_000_000_000 /*2s*/)
timers(consume load_timer)
@d-led
Copy link
Author

d-led commented Dec 22, 2017

use "time"
use "collections"

class Tick is TimerNotify
  let _env : Env
  var _counter: U64 = 0

  new iso create(env: Env) =>
    _env = env

  fun ref _next(): String =>
    _counter = _counter + 1
    _counter.string()

  fun ref apply(timer: Timer, count: U64): Bool =>
    _env.out.print("Tick "+_next())
    true

actor Loader
  var _counter: U64 = 0
  let _env : Env
  let _id : U64

  new create(env: Env, id: U64) =>
    _env = env
    _id = id

  be spin() =>
    _spin()

  fun ref _spin() =>
    while _counter >=  0 do
      if (_counter % 1000000000) == 0 then
        _env.out.print("Task: "+_id.string())
      end
      _counter = _counter + 1
    end
    _env.out.print(_counter.string())


class Load is TimerNotify
  let _env : Env
  let _loaders: List[Loader] = List[Loader]
  var _counter: U64 = 0

  new iso create(env: Env) =>
    _env = env

  fun ref _next() =>
    _counter = _counter + 1
    _env.out.print("Started task "+_counter.string())
    let l = Loader(_env, _counter)
    _loaders.push(l)
    l.spin()

  fun ref apply(timer: Timer, count: U64): Bool =>
    _next()
    true


actor Main
  new create(env: Env) =>
    let timers = Timers
    let timer = Timer(Tick(env), 0, 1_000_000_000 /*1s*/)
    timers(consume timer)
    env.out.print("Started the ticker")
    let load_timer = Timer(Load(env), 0, 2_000_000_000 /*2s*/)
    timers(consume load_timer)

no crash

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment