使用SetThreadExecutionState恢复默认设置后,系统不会休眠

时间:2013-11-29 11:05:16

标签: winapi c#-4.0 timer pinvoke

我创建了一个防止系统休眠的方法,如下所示:

    public static void KeepSystemAwake(bool bEnable)
    {
        if (bEnable)
        {
            EXECUTION_STATE state = SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
        }
        else
        {
            EXECUTION_STATE state = SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
        }
    }

该方法可以防止系统进入睡眠状态,但是当我调用该方法的ES_CONTINUOUS部分时,系统在我希望它正常运行时根本不会休眠。我错过了什么?我在不同的线程(Timer)中运行此代码

1 个答案:

答案 0 :(得分:2)

  

我在不同的线程(Timer)中运行此代码

如果您使用类似System.Threading.Timer回调的内容,则会在不同的(读取:任意)线程上调用它。

来自MSDN

  

计时器执行的回调方法应该是可重入的,因为它是在ThreadPool线程上调用的

确保您为同一个帖子调用SetThreadExecutionState。理想情况下,您将调用序列化到一个线程(如主线程)。