simplified version of timeout in Golang
for documentation, view the API reference
go get github.com/andy2046/tik
package main
import (
"sync"
"time"
"github.com/andy2046/tik"
)
func main() {
var l sync.RWMutex
// init a new instance
tk := tik.New()
i := 0
cb := func() {
l.Lock()
i++
l.Unlock()
}
// schedule to run cb in 500ms
to := tk.Schedule(500, cb)
if !to.Pending() {
panic("it should be pending")
}
if to.Expired() {
panic("it should NOT be expired")
}
for {
time.Sleep(100 * time.Millisecond)
if tk.AnyPending() {
continue
}
if tk.AnyExpired() {
continue
}
break
}
l.RLock()
defer l.RUnlock()
if i != 1 {
panic("fail to callback", i)
}
}