广汽安道拓Acura项目MES后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

71 lines
1.1 KiB

package channel
import (
"errors"
"sync"
)
type TaskChannel struct {
name string
c chan interface{}
closed bool
mutex sync.Mutex
}
func NewTaskChannel(name string) *TaskChannel {
return &TaskChannel{
c: make(chan interface{}, 100),
name: name,
}
}
// IsClosed 判断channel是否关闭
func (c *TaskChannel) IsClosed() bool {
c.mutex.Lock()
defer c.mutex.Unlock()
return c.closed
}
// SendData 发送数据
func (c *TaskChannel) SendData(data interface{}) error {
c.mutex.Lock()
defer c.mutex.Unlock()
if c.closed {
return errors.New("管道已关闭")
}
c.c <- data
return nil
}
func (c *TaskChannel) Close() {
c.mutex.Lock()
defer c.mutex.Unlock()
if c.closed {
return
}
close(c.c)
c.closed = true
}
func (c *TaskChannel) Read() (data interface{}, ok bool, err error) {
c.mutex.Lock()
if c.closed {
err = errors.New("管道已关闭")
return
}
c.mutex.Unlock()
data, ok = <- c.c
return
}
func (c *TaskChannel) ResetChannel() (err error) {
c.mutex.Lock()
defer c.mutex.Unlock()
if !c.closed {
err = errors.New("管道未关闭")
return
}
c.closed = false
c.c = make(chan interface{}, 50)
return
}