蝙蝠岛资源网 Design By www.hbtsch.com
我就废话不多说了,大家还是直接看代码吧~
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 main import ( "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()) }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
标签:
golang,等待触发事件
蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com
暂无golang等待触发事件的实例的评论...
更新日志
2024年06月14日
2024年06月14日
- 刘锡明.1998-把你交给谁才不后悔【代言者】【WAV+CUE】
- 赵咏华.1993-求婚【全美唱片】【WAV+CUE】
- 《朴树3CD合集》[WAV/FLAC分轨][1.3G]
- 姚璎格《听姚璎格 致敬经典》2CD[WAV+CUE][764M]
- 韩磊《韩唱淋漓·韩磊纪念版特辑 4CD》[WAV+CUE][2.12GB]
- 世界启元平民阵容组队推荐 平民强势阵容攻略
- 世界启元和文明6一样吗 世界启元和文明6区别介绍
- 世界启元新手入门指南 新手实用技巧分享
- 民谣合集《红色推土机》2CD【WAV+CUE】
- 哎呀,服务正在维护中……
- 詹姆斯·拉斯特-世界级指挥及演奏大师《天堂鸟Paradiesvogel》[WAV+CUE]
- 林忆莲.1990-超级金装忆莲2CD【SONY】【WAV+CUE】
- 满文军.1997-让你的天空最美【正大国际】【WAV+CUE】
- 群星.1999-两个人2CD(华纳音乐大世纪系列)【华纳】【WAV+CUE】
- 世界启元手游什么时候上线 世界启元上线时间介绍