SetThreadExecutionState with ES_CONTINUOUS -如果应用程序在重置标志之前崩溃会
SetThreadExecutionState with ES_CONTINUOUS - what happens if app crashes before resetting flags
我将使用SetThreadExecutionState
WinAPI函数来保持系统在某个作业期间运行。
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);
根据MSDN,如果使用ES_CONTINUOUS
,应用程序必须清除作业完成后设置的标志。
如果我的应用程序在作业期间崩溃,我将无法清除先前设置的标志。我的问题是,当应用程序终止时,系统会清除应用程序设置的标志还是系统保持清醒?
是,当设置这些标志的线程不再存在时,系统将清除(或者更准确地说,丢弃)这些标志。
无论线程是干净地退出还是被终止。
注意:我只能从我自己的经验中确认,一旦进程退出,标志将被忽略,但是函数的名称强烈暗示标志是按线程设置的,而不是按进程设置的。
根据系统睡眠标准文档:
系统维护了调用SetThreadExecutionState的应用程序的计数。系统跟踪每个调用SetThreadExecutionState的线程,并相应地调整计数器。如果此计数器为零且没有任何用户输入,则系统进入休眠状态。
所以可以想象,甚至很可能,如果应用程序崩溃,调用线程消失,系统将知道并相应地调整计数器,就像它对大多数其他线程敏感资源所做的那样。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用 -O1 优化标志编译项目时共享库崩溃
- SetThreadExecutionState with ES_CONTINUOUS -如果应用程序在重置标志之前崩溃会