广汽安道拓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.

70 lines
1.1 KiB

2 years ago
  1. package channel
  2. import (
  3. "errors"
  4. "sync"
  5. )
  6. type TaskChannel struct {
  7. name string
  8. c chan interface{}
  9. closed bool
  10. mutex sync.Mutex
  11. }
  12. func NewTaskChannel(name string) *TaskChannel {
  13. return &TaskChannel{
  14. c: make(chan interface{}, 100),
  15. name: name,
  16. }
  17. }
  18. // IsClosed 判断channel是否关闭
  19. func (c *TaskChannel) IsClosed() bool {
  20. c.mutex.Lock()
  21. defer c.mutex.Unlock()
  22. return c.closed
  23. }
  24. // SendData 发送数据
  25. func (c *TaskChannel) SendData(data interface{}) error {
  26. c.mutex.Lock()
  27. defer c.mutex.Unlock()
  28. if c.closed {
  29. return errors.New("管道已关闭")
  30. }
  31. c.c <- data
  32. return nil
  33. }
  34. func (c *TaskChannel) Close() {
  35. c.mutex.Lock()
  36. defer c.mutex.Unlock()
  37. if c.closed {
  38. return
  39. }
  40. close(c.c)
  41. c.closed = true
  42. }
  43. func (c *TaskChannel) Read() (data interface{}, ok bool, err error) {
  44. c.mutex.Lock()
  45. if c.closed {
  46. err = errors.New("管道已关闭")
  47. return
  48. }
  49. c.mutex.Unlock()
  50. data, ok = <- c.c
  51. return
  52. }
  53. func (c *TaskChannel) ResetChannel() (err error) {
  54. c.mutex.Lock()
  55. defer c.mutex.Unlock()
  56. if !c.closed {
  57. err = errors.New("管道未关闭")
  58. return
  59. }
  60. c.closed = false
  61. c.c = make(chan interface{}, 50)
  62. return
  63. }