github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/optional/time/sleep.go (about) 1 package time 2 3 import ( 4 "time" 5 6 "github.com/lmorg/murex/lang" 7 "github.com/lmorg/murex/lang/types" 8 ) 9 10 func init() { 11 lang.DefineFunction("sleep", cmdSleep, types.Null) 12 } 13 14 func cmdSleep(p *lang.Process) error { 15 p.Stdout.SetDataType(types.Null) 16 17 i, err := p.Parameters.Int(0) 18 if err != nil { 19 return err 20 } 21 22 sleep := time.After(time.Duration(int64(i)) * time.Second) 23 24 for { 25 select { 26 case <-p.Context.Done(): 27 return nil 28 29 case <-sleep: 30 return nil 31 32 case <-p.HasStopped: 33 <-p.WaitForStopped 34 } 35 } 36 }