SetThreadExecutionState is not working when called from windows service

爷,独闯天下 提交于 2019-12-03 12:40:30

Calling SetThreadExecutionState without ES_CONTINUOUS simply resets the idle timer; to keep the display or system in the working state, the thread must call SetThreadExecutionState periodically.

(source)

You need to call this function every now and then. It's not a fire-and-forget.

SetThreadExecutionState is only valid for the thread that calls it. If it's called in a worker thread, even with ES_CONTINUOUS, once the worker thread is dead, the setting is not valid anymore and then screen saver will be on again.

Calling this API from a Timer will wake up a worker thread before previous thread is dead and therefore makes it work.

So if you call SetThreadExecutionState in your main thread, like UI thread in client applications, you don't need timer.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!