时间:2021-05-22
我就废话不多说了,大家还是直接看代码吧~
type Wait interface { // Register waits returns a chan that waits on the given ID. // The chan will be triggered when Trigger is called with // the same ID. Register(id uint64) <-chan interface{} // Trigger triggers the waiting chans with the given ID. Trigger(id uint64, x interface{}) IsRegistered(id uint64) bool} type list struct { l sync.RWMutex m map[uint64]chan interface{}} func Newlist() Wait { return &list{m : make(map[uint64]chan interface{})}} //注册func (w *list) Register(id uint64) <-chan interface{} { w.l.Lock() defer w.l.Unlock() ch := w.m[id] if ch != nil { log.Fatal("dup id error") return nil } ch = make(chan interface{},1) w.m[id] = ch return ch} //触发func (w *list) Trigger(id uint64, x interface{}) { w.l.Lock() ch := w.m[id] delete(w.m,id) w.l.Unlock() if ch != nil { ch <- x close(ch) }} //判断该id是否被注册func (w *list) IsRegistered(id uint64) bool { w.l.RLock() defer w.l.Unlock() _,ok := w.m[id] return ok}示例
var timeOutDuration = time.Minute*10 func main() { list := Newlist() rid := uint64(time.Now().UnixNano()) go func() { ch := list.Register(rid) fmt.Println("start register:",rid) if ch == nil { return } select { case x := <- ch: fmt.Printf("trigger over id:%d,x:%v\n",rid,x) case <-time.After(timeOutDuration): log.Println("timeout error:",rid) } }() time.Sleep(time.Second) rid2 := uint64(time.Now().UnixNano()) go func() { ch := list.Register(rid2) fmt.Println("start register:",rid2) if ch == nil { return } select { case x := <- ch: fmt.Printf("trigger over id:%d,x:%v\n",rid2,x) case <-time.After(timeOutDuration): log.Println("timeout error:",rid2) } }() go func() { time.Sleep(time.Second*5) list.Trigger(rid,"Hello") time.Sleep(time.Second*3) list.Trigger(rid2,"World") }() select { }}补充:GO 程序等待一段时间执行
我就废话不多说了,大家还是直接看代码吧~
package mainimport ( "fmt" "time")func main() { fmt.Println(time.Now()) //等1秒 time.Sleep(time.Second * 1) fmt.Println(time.Now()) //等1秒 <-time.After(time.Second * 1) fmt.Println(time.Now())}以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲解了鼠标指针停止运动触发事件实例代码,分享给大家供大家参考,具体内容如下在js中有有内置的鼠标各种事件,比如click事件,mousemove事件等等
本文实例讲述了JS实现select选中option触发事件操作。分享给大家供大家参考,具体如下:我们在用到下拉列表框select时,需要对选中的选项触发事件,其
javascript中事件冒泡和事件捕获机制的详解二者作用:描述事件触发时序问题事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件---由
实例如下://触发退出程序事件privatevoidbutton1_Click(objectsender,EventArgse){Application.Exi
本文实例讲述了JavaScript事件冒泡与事件捕获。分享给大家供大家参考,具体如下:1、事件冒泡在一个对象上触发某类事件,如onclick事件等,在其祖先节点