diff --git a/backend/nosleep_windows.go b/backend/nosleep_windows.go index 6a10d2d..d605e5a 100644 --- a/backend/nosleep_windows.go +++ b/backend/nosleep_windows.go @@ -2,16 +2,30 @@ package backend -import "syscall" +import ( + "sync/atomic" + "syscall" +) const ( ES_CONTINUOUS uint = 0x80000000 ES_SYSTEM_REQUIRED uint = 0x00000001 ) +var ( + sleepDisabled atomic.Bool + executionState *syscall.LazyProc +) + func SetSystemSleepDisabled(disable bool) { - kernel32 := syscall.NewLazyDLL("kernel32.dll") - executionState := kernel32.NewProc("SetThreadExecutionState") + if old := sleepDisabled.Swap(disable); old == disable { + return + } + + if executionState == nil { + kernel32 := syscall.NewLazyDLL("kernel32.dll") + executionState = kernel32.NewProc("SetThreadExecutionState") + } uType := ES_CONTINUOUS if disable {