use channel to communicate instead of sync/atomic

This commit is contained in:
Dawid Wysokiński 2022-11-29 05:44:44 +01:00
parent b08ae16191
commit b14068cdea
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
1 changed files with 9 additions and 6 deletions

15
main.go
View File

@ -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)