Приложения UWP (или «Метро») в Windows 8/10 часто приостанавливаются, если они не находятся на переднем плане. Приложения в этом состоянии продолжают существовать, но больше не потребляют процессорное время. Это изменение, по-видимому, было введено для повышения производительности на устройствах с низким энергопотреблением / запоминающих устройствах, таких как планшеты и телефоны.
Скажите, пожалуйста, какой самый элегантный и простой способ обнаружить приложение в этом состоянии?
На данный момент я вижу 2 возможных решения:
Вызовите NtQuerySystemInformation () и перечислите каждый процесс и каждый поток. Процесс "приостановлен", если все потоки находятся в состоянии ожидания. Этот подход потребует большого количества кода, и критически NtQuerySystemInformation () является лишь частично документированным и может быть удален в будущей ОС. NtQueryInformationProcess () также может предложить решение с той же проблемой.
Вызовите GetProcessTimes () и запишите счетчики для каждого процесса. Подождите некоторое время (минуты) и проверьте их снова. Если счетчики процесса не изменились, то предположим, что процесс приостановлен. Это хак, и меня могут застрелить, даже если подумать об этом.
Джим