Skip to content

Commit

Permalink
修复: 队列在退出时会在处理完所有事件后再结束
Browse files Browse the repository at this point in the history
  • Loading branch information
davyxu committed Dec 13, 2017
1 parent 0be8243 commit 910b491
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 7 deletions.
2 changes: 1 addition & 1 deletion examples/chat/client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"strings"
)

var log *golog.Logger = golog.New("main")
var log = golog.New("main")

func ReadConsole(callback func(string)) {

Expand Down
2 changes: 1 addition & 1 deletion examples/chat/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/davyxu/golog"
)

var log *golog.Logger = golog.New("main")
var log = golog.New("main")

func main() {
queue := cellnet.NewEventQueue()
Expand Down
23 changes: 18 additions & 5 deletions queue.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cellnet

import (
"runtime/debug"
"sync"
)

type EventQueue interface {
Expand All @@ -22,9 +23,11 @@ type EventQueue interface {
type evQueue struct {
queue chan func()

exitSignal chan int
endSignal sync.WaitGroup

capturePanic bool

result int
}

func (self *evQueue) EnableCapturePanic(v bool) {
Expand Down Expand Up @@ -63,19 +66,30 @@ func (self *evQueue) protectedCall(callback func()) {

func (self *evQueue) StartLoop() {

self.endSignal.Add(1)

go func() {
for callback := range self.queue {

if callback == nil {
break
}

self.protectedCall(callback)
}

self.endSignal.Done()
}()
}

func (self *evQueue) StopLoop(result int) {
self.exitSignal <- result
self.queue <- nil
self.result = result
}

func (self *evQueue) Wait() int {
return <-self.exitSignal
self.endSignal.Wait()
return self.result
}

const DefaultQueueSize = 100
Expand All @@ -87,8 +101,7 @@ func NewEventQueue() EventQueue {

func NewEventQueueByLen(l int) EventQueue {
self := &evQueue{
queue: make(chan func(), l),
exitSignal: make(chan int),
queue: make(chan func(), l),
}

return self
Expand Down

0 comments on commit 910b491

Please sign in to comment.