SmpPacket 调用这两个方法
```
var wg sync.WaitGroup
func (c *Conn) SmpPacket() {
wg.Add(2)
go c.Getsmp()
go checksmp()
wg.Wait()
}
```
不使用 wg 的方式,直接用协程的方式启用两个方法,可以获取正常的数据,
只用使用 wg 的方法,则打印的结果就会混乱出错,请问如何解决?
有两个协程
getsmp 获取相关数据放到 msg_chan中
```
func (c *Conn) Getsmp() {
// runtime.GOMAXPROCS(1)
defer wg.Done()
defer fmt.Println("循环遍历结束")
defer c.hci.cancelDial(nil)
defer c.Close()
logger.Info("正在获取数据中==============")
for {
// logger.Info("正在获取数据中====%d==========", i)
if sm, err := c.smprecombine(); err != nil {
if err != io.EOF {
err = errors.Wrap(err, "recombine")
logger.Info("err", err)
c.hci.dispatchError(err)
}
} else {
logger.Warn("sm数据将放入msg_chan")
msg_chan <- sm
logger.Info("smp数据包", hex.EncodeToString(sm), sm)
}
}
}
```
checksmp用于从 msg_chan 中获取资料
```
func checksmp() {
i := 0
defer wg.Done()
for {
i++
a := strconv.Itoa(i)
logger.Warn("从 msg 中获取数据", a)
// smp_chan <- hex.EncodeToString(<-msg_chan)
smp_group := <-msg_chan
group = append(group, smp_group...)
logger.Warn("从 smp 中获取数据", group)
// close(msg_chan)
logger.Warn("--------准备重新获取-------")
// return
}
}
```
有疑问加站长微信联系(非本文作者)