]> 127.0.0.1 Git - part/.git/commitdiff
fix
authorqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 12 Mar 2023 08:48:52 +0000 (16:48 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 12 Mar 2023 08:48:52 +0000 (16:48 +0800)
msgq/Msgq.go
msgq/Msgq_test.go

index b8bf6a7c5451ecddc107818c894ac9a8477c766b..6821f1c99e9cb21f3dd379cfd48f710ed9a767fd 100644 (file)
@@ -97,33 +97,37 @@ func (m *Msgq) Pull_tag(func_map map[string]func(any) (disable bool)) {
 }
 
 func (m *Msgq) Pull_tag_async_only(key string, f func(any) (disable bool)) {
-       var disable = false
+       var disable = signal.Init()
 
        m.Register_front(func(data any) bool {
-               if disable {
+               if !disable.Islive() {
                        return true
                }
                if d, ok := data.(Msgq_tag_data); ok && d.Tag == key {
-                       go func(t *bool) {
-                               *t = f(d.Data)
-                       }(&disable)
+                       go func() {
+                               if f(d.Data) {
+                                       disable.Done()
+                               }
+                       }()
                }
                return false
        })
 }
 
 func (m *Msgq) Pull_tag_async(func_map map[string]func(any) (disable bool)) {
-       var disable = false
+       var disable = signal.Init()
 
        m.Register_front(func(data any) bool {
-               if disable {
+               if !disable.Islive() {
                        return true
                }
                if d, ok := data.(Msgq_tag_data); ok {
                        if f, ok := func_map[d.Tag]; ok {
-                               go func(t *bool) {
-                                       *t = f(d.Data)
-                               }(&disable)
+                               go func() {
+                                       if f(d.Data) {
+                                               disable.Done()
+                                       }
+                               }()
                        }
                }
                return false
@@ -186,17 +190,19 @@ func (m *MsgType[T]) Pull_tag_async_only(key string, f func(T) (disable bool)) {
 }
 
 func (m *MsgType[T]) Pull_tag_async(func_map map[string]func(T) (disable bool)) {
-       var disable = false
+       var disable = signal.Init()
 
        m.m.Register_front(func(data any) bool {
-               if disable {
+               if !disable.Islive() {
                        return true
                }
                if d, ok := data.(Msgq_tag_data); ok {
                        if f, ok := func_map[d.Tag]; ok {
-                               go func(t *bool) {
-                                       *t = f(d.Data.(T))
-                               }(&disable)
+                               go func() {
+                                       if f(d.Data.(T)) {
+                                               disable.Done()
+                                       }
+                               }()
                        }
                }
                return false
index 4b2c3f44ecf2917c41052071ebca7239f5aa89ee..de4ad2a513969ac706e687ece9820d821f091925 100644 (file)
@@ -1,7 +1,6 @@
 package part
 
 import (
-       "fmt"
        _ "net/http/pprof"
        "testing"
        "time"
@@ -374,29 +373,24 @@ func Test_msgq7(t *testing.T) {
 }
 
 func Test_msgq8(t *testing.T) {
-       var c = make(chan string, 100)
-       var cc string
        msg := NewType[int]()
        msg.Pull_tag_async_only(`1`, func(i int) (disable bool) {
-               time.Sleep(time.Second)
-               c <- fmt.Sprintf("a%d", i)
+               if i > 4 {
+                       t.Fatal(i)
+               }
                return i > 3
        })
        msg.Pull_tag_only(`1`, func(i int) (disable bool) {
-               time.Sleep(time.Second)
-               c <- fmt.Sprintf("s%d", i)
+               if i > 6 {
+                       t.Fatal(i)
+               }
                return i > 5
        })
        for i := 0; i < 20; i++ {
                msg.Push_tag(`1`, i)
+               time.Sleep(time.Millisecond * 20)
        }
        time.Sleep(time.Second)
-       for len(c) != 0 {
-               cc += <-c
-       }
-       if cc != "a0s0a1s1a2s2a3s3a4s4s5s6" {
-               t.Fatal()
-       }
 }
 
 // func Test_msgq6(t *testing.T) {