为什么SetThreadExecutionState(ES_SYSTEM_REQUIRED)会阻止显示器关闭电源?

时间:2009-10-17 03:53:35

标签: winapi sleep suspend

我试图在允许显示器关机的同时保持系统开启,以便在系统无人看管时完成下载。为实现这一点,我打电话给:

SetThreadExecutionState(ES_SYSTEM_REQUIRED);

每当我从下载中获取数据时。但是,这似乎也可以防止显示器掉电(显示器按照其配置的调光定时器调暗,但永远不会完全关闭)。根据{{​​3}},只有在我通过ES_DISPLAY_REQUIRED时才会发生这种情况 - 为什么它会被阻止?

请注意,当我停止呼叫SetThreadExecutionState时,显示屏不会再次开始关机;我必须终止程序以允许显示关闭。但是,如果使用ES_CONTINUOUS调用它不应该只有持久效果吗?

我正在使用Windows 7,如果重要的话。我目前无法在其他版本上进行测试......

2 个答案:

答案 0 :(得分:1)

如果在没有ES_CONTINUOUS的情况下调用此函数,它将不会继续计算系统和监视器的空闲计时器。所以你必须通过ES_CONTINUOUS组合传递参数。例如你可以打电话 SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS); 代替 SetThreadExecutionState(ES_SYSTEM_REQUIRED);

答案 1 :(得分:0)

没关系 - 看来the bug不在我的代码中:)