我将使用SetThreadExecutionState
WinAPI函数在某项工作期间保持系统运行。
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);
根据MSDN,如果使用ES_CONTINUOUS
,应用程序必须清除作业完成后设置的标记。
如果我的应用程序在作业期间崩溃,我将无法清除之前设置的标志。我的问题是,当应用终止或者系统保持清醒时,系统是否会清除应用设置的标志?
答案 0 :(得分:2)
是的,当设置它们的线程不再存在时,系统将清除(或更准确地说,丢弃)标志。
线程是干净地退出还是被终止无关紧要。
注意:我只能根据自己的经验确认一旦进程退出就会忽略这些标志,但是函数的名称强烈暗示每个线程而不是每个进程设置标志。
答案 1 :(得分:2)
系统维护一个名为SetThreadExecutionState的应用程序计数。 系统会跟踪调用SetThreadExecutionState 的每个线程,并相应地调整计数器。如果此计数器达到零并且没有任何用户输入,则系统进入休眠状态。
所以可以想象,如果应用程序崩溃并且调用线程消失,系统将相应地知道并调整计数器,就像对大多数其他线程敏感的资源一样。