好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang等待觸發事件的實例

golang等待觸發事件的實例

熱門標簽:不封卡外呼系統 宿遷便宜外呼系統代理商 仙桃400電話辦理 地圖標注免費定制店 重慶慶云企業400電話到哪申請 寧波語音外呼系統公司 上海極信防封電銷卡價格 湛江crm外呼系統排名 鄭州智能語音電銷機器人價格

我就廢話不多說了,大家還是直接看代碼吧~

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中runtime的使用詳解
  • 如何判斷Golang接口是否實現的操作
  • 淺談golang中的&^位清空操作
  • Golang之defer 延遲調用操作
  • 解決golang sync.Wait()不執行的問題
  • golang執行命令操作 exec.Command
  • 對Golang中的runtime.Caller使用說明

標簽:安康 物業服務 青海 西雙版納 電子產品 遼寧 海南 儋州

巨人網絡通訊聲明:本文標題《golang等待觸發事件的實例》,本文關鍵詞  golang,等待,觸發,事件,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang等待觸發事件的實例》相關的同類信息!
  • 本頁收集關于golang等待觸發事件的實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 三代共用小婬娃np| 最近中文字幕完整版视频1| 国产精品图片| 在线无码入区全是精品秘?| 亚洲精品无码无人区麻豆a| 超污视频免费看| h版激情丛林在线播放| japanese媚药按摩massage| 娜美被?到爽??高潮痉挛漫画| 小叔子的啊好大| 女配不掺和(快穿)第二部| 久久伊人婷婷| 回到古代当天子电视剧免费观看| 99国产这里只有精品视频 | 美女隐私打扑克视频软件| 老子午夜我不卡在线理伦| 美女被桶秘?免费网站| 两个美女互吃奶亲胸| 韩国大胸女友在线观看完整版| 女奥特曼被触手?高潮| 四虎精品成人免费网站| 青草草在线观看| 女人的大逼| 超h高h污肉校园1v1| 殴美日韩精品视频一二三区| 280hsck成人网| 高清视频欧美性生活| ktv直男给口鸭子| 把女人的嗷嗷叫视频| 丝袜老师让我?了一夜动图| 综合欧美五月丁香五月| 欧美深到肚子的全臂交 | 开发尿孔哭喊调教失禁| 江添别c我?啊?嗯上课| 熟女人妻AⅤ一区二区三区电影| 免费无遮挡羞羞漫画男男| 免费看日产一区二区三区| 波野和搜子居同的日子1中文| 成午夜精品一区二区三区软件| 九九热这里只有精品免费视频| 激情逼逼|