use channel to communicate instead of sync/atomic
This commit is contained in:
parent
b08ae16191
commit
b14068cdea
15
main.go
15
main.go
|
@ -9,7 +9,6 @@ import (
|
|||
"os/signal"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
@ -37,7 +36,8 @@ func main() {
|
|||
_ = cmd.Run()
|
||||
}()
|
||||
|
||||
var isScreenSaverActive uint32
|
||||
screenSaverCh := make(chan bool, 1)
|
||||
defer close(screenSaverCh)
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
|
@ -55,9 +55,9 @@ func main() {
|
|||
continue
|
||||
}
|
||||
if strings.Contains(scanner.Text(), "boolean true") {
|
||||
atomic.StoreUint32(&isScreenSaverActive, 1)
|
||||
screenSaverCh <- true
|
||||
} else {
|
||||
atomic.StoreUint32(&isScreenSaverActive, 0)
|
||||
screenSaverCh <- false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -67,14 +67,17 @@ func main() {
|
|||
go func() {
|
||||
defer wg.Done()
|
||||
|
||||
ticker := time.NewTicker(25 * time.Minute)
|
||||
isScreenSaverActive := false
|
||||
ticker := time.NewTicker(30 * time.Minute)
|
||||
defer ticker.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case b := <-screenSaverCh:
|
||||
isScreenSaverActive = b
|
||||
case <-ticker.C:
|
||||
if atomic.LoadUint32(&isScreenSaverActive) == 1 {
|
||||
if isScreenSaverActive {
|
||||
continue
|
||||
}
|
||||
_ = sendNotification(ctx)
|
||||
|
|
Loading…
Reference in New Issue