From 45bf89b61a9299187901d9bedc13fe749d70d212 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 2 Feb 2018 14:56:02 +0800 Subject: [PATCH] =?UTF-8?q?gqueue=E6=96=B0=E5=A2=9EClose=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BE=BF=E4=BA=8E=E9=98=9F=E5=88=97=E4=BC=98=E9=9B=85=E9=80=80?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/container/gqueue/int_queue.go | 5 +++++ g/container/gqueue/interface_queue.go | 5 +++++ g/container/gqueue/string_queue.go | 5 +++++ g/container/gqueue/uint_queue.go | 5 +++++ geg/other/test.go | 32 +++++++++++++++++++++++++-- 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/g/container/gqueue/int_queue.go b/g/container/gqueue/int_queue.go index 794004ee7..e6fca5e3b 100644 --- a/g/container/gqueue/int_queue.go +++ b/g/container/gqueue/int_queue.go @@ -48,6 +48,11 @@ func (q *IntQueue) Pop() int { return 0 } +// 关闭队列(通知所有通过Pop阻塞的协程退出) +func (q *IntQueue) Close() { + q.events <- struct{}{} +} + // 获取当前队列大小 func (q *IntQueue) Size() int { return len(q.events) diff --git a/g/container/gqueue/interface_queue.go b/g/container/gqueue/interface_queue.go index 7c6122f23..a357ea9cc 100644 --- a/g/container/gqueue/interface_queue.go +++ b/g/container/gqueue/interface_queue.go @@ -49,6 +49,11 @@ func (q *InterfaceQueue) Pop() interface{} { return nil } +// 关闭队列(通知所有通过Pop阻塞的协程退出) +func (q *InterfaceQueue) Close() { + q.events <- struct{}{} +} + // 获取当前队列大小 func (q *InterfaceQueue) Size() int { return len(q.events) diff --git a/g/container/gqueue/string_queue.go b/g/container/gqueue/string_queue.go index fb67c0c0c..03bc61211 100644 --- a/g/container/gqueue/string_queue.go +++ b/g/container/gqueue/string_queue.go @@ -48,6 +48,11 @@ func (q *StringQueue) Pop() string { return "" } +// 关闭队列(通知所有通过Pop阻塞的协程退出) +func (q *StringQueue) Close() { + q.events <- struct{}{} +} + // 获取当前队列大小 func (q *StringQueue) Size() int { return len(q.events) diff --git a/g/container/gqueue/uint_queue.go b/g/container/gqueue/uint_queue.go index 601ffb59e..4b3d31968 100644 --- a/g/container/gqueue/uint_queue.go +++ b/g/container/gqueue/uint_queue.go @@ -48,6 +48,11 @@ func (q *UintQueue) Pop() uint { return 0 } +// 关闭队列(通知所有通过Pop阻塞的协程退出) +func (q *UintQueue) Close() { + q.events <- struct{}{} +} + // 获取当前队列大小 func (q *UintQueue) Size() int { return len(q.events) diff --git a/geg/other/test.go b/geg/other/test.go index 6c5aadefa..d9fc686f5 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -1,8 +1,36 @@ package main -import "gitee.com/johng/gf/g/encoding/gparser" +import ( + "fmt" + "time" +) func main() { - gparser.Load("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame/config.yml") + events1 := make(chan int, 100) + events2 := make(chan int, 100) + go func() { + for{ + select { + case t1 := <-events1: + fmt.Println(t1) + case t2 := <-events2: + fmt.Println(t2) + } + } + + }() + + go func() { + time.Sleep(2*time.Second) + events1 <- 1 + events2 <- 2 + time.Sleep(2*time.Second) + close(events1) + close(events2) + }() + + select { + + } } \ No newline at end of file