From 73da3deb53f0f33e2dc0f15cdc8ad11466a49c56 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 8 Apr 2023 23:05:48 +0800 Subject: [PATCH] update --- funcCtrl/FuncCtrl.go | 12 ++++++++++++ funcCtrl/FuncCtrl_test.go | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) 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 -- 2.39.2