Add global idler and other helpers #2
22
idle/idle.go
22
idle/idle.go
@ -2,10 +2,32 @@
|
|||||||
package idle
|
package idle
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
gIdler atomic.Pointer[idler]
|
||||||
|
)
|
||||||
|
|
||||||
|
func Wait(timeout time.Duration) error {
|
||||||
|
i := CreateIdler(timeout).(*idler)
|
||||||
|
ok := gIdler.CompareAndSwap(nil, i)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("idler already waiting")
|
||||||
|
}
|
||||||
|
i.Wait()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Tick() {
|
||||||
|
i := gIdler.Load()
|
||||||
|
if i != nil {
|
||||||
|
i.Tick()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Idler interface {
|
type Idler interface {
|
||||||
Enter()
|
Enter()
|
||||||
Exit()
|
Exit()
|
||||||
|
Loading…
Reference in New Issue
Block a user