From: qydysky Date: Sat, 8 Apr 2023 15:05:48 +0000 (+0800) Subject: update X-Git-Tag: v0.24.7 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=73da3deb53f0f33e2dc0f15cdc8ad11466a49c56;p=part%2F.git update --- diff --git a/funcCtrl/FuncCtrl.go b/funcCtrl/FuncCtrl.go index 53c68c8..ae9e413 100644 --- a/funcCtrl/FuncCtrl.go +++ b/funcCtrl/FuncCtrl.go @@ -26,6 +26,7 @@ type FlashFunc struct { b atomic.Uintptr l sync.Mutex c *context.CancelFunc + f *func() } func (t *FlashFunc) Flash() (current uintptr) { @@ -53,6 +54,17 @@ func (t *FlashFunc) FlashWithContext() (c context.Context) { return } +func (t *FlashFunc) FlashWithCallback(f func()) { + t.l.Lock() + defer t.l.Unlock() + + if t.f != nil { + (*t.f)() + t.f = nil + } + t.f = &f +} + // 新的等待旧的 type BlockFunc struct { sync.Mutex diff --git a/funcCtrl/FuncCtrl_test.go b/funcCtrl/FuncCtrl_test.go index eb7d425..0ef03c7 100644 --- a/funcCtrl/FuncCtrl_test.go +++ b/funcCtrl/FuncCtrl_test.go @@ -61,6 +61,23 @@ func Test_FlashFunc2(t *testing.T) { } } +func Test_FlashFunc3(t *testing.T) { + var cc = make(chan int, 2) + var b FlashFunc + var a = func(i int) { + b.FlashWithCallback(func() { + cc <- i + }) + } + go a(1) + go a(2) + go a(3) + time.Sleep(time.Second) + if len(cc) != 2 && <-cc != 1 && <-cc != 2 { + t.Fatal(len(cc)) + } +} + func Test_BlockFunc(t *testing.T) { var c = make(chan int, 2) var b BlockFunc