Überprüfen der Ressourcenunterstützung für Aktivitätskoordinator

In diesem Beispiel wird gezeigt, wie Apps die Unterstützung für Ressourcen vor dem Erstellen einer Richtlinie mithilfe von IsActivityCoordinatorResourceSupported ermitteln können. Sie können zur IsActivityCoordinatorResourceSupported Laufzeit nach allen unterstützten ACTIVITY_COORDINATOR_RESOURCE suchen.

Überprüfen des NPU-Supportbeispiels

Im folgenden Beispiel wird veranschaulicht, wie Sie mithilfe der neuen Api zur Funktionsprüfung auf Ressourcen nach NPU-Unterstützung suchen. Mit dieser API können Apps zur Laufzeit nach unterstützten Ressourcentypen suchen und zurückgeben true , ob die NPU-Ressource im aktuellen System unterstützt wird. In diesem Beispiel wird eine Aktivitätskoordinator-Richtlinie erstellt und die NPU-Ressourcenbedingung auf den ACTIVITY_COORDINATOR_CONDITION_GOOD Fall festgelegt, dass sie unterstützt wird.

#include <Windows.h>
#include <ActivityCoordinator.h>
#include <wil/resource.h>
#include <apiquery2.h>

// Declare RAII wrappers for the Activity Coordinator policy and subscription.
// These behave like traditional smart pointers and will call their associated
// API cleanup functions when they go out of scope.
using unique_policy = wil::unique_any<
          ACTIVITY_COORDINATOR_POLICY,
          decltype(&DestroyActivityCoordinatorPolicy),
          DestroyActivityCoordinatorPolicy>;

bool
CanUseNpuPolicy()
{
    // Check that the Activity Coordinator feature check API is implemented
    // before calling.
    if (IsApiSetImplemented("ext-ms-win-resourcemanager-activitycoordinator-l1-1-1")) {
        if (IsActivityCoordinatorResourceSupported(ACTIVITY_COORDINATOR_RESOURCE_NPU)) {
            return true;
        }
    }

    return false;
}

int
__cdecl
wmain()
{
    unique_policy policy;

    // Activity Coordinator support for NPUs does not indicate their actual
    // presence on the system. Applications must still detect and target desired
    // hardware using their API or framework of choice.
    //
    // When using system resources not supported by Activity Coordinator, it is
    // recommended that policies always include USER_IDLE in the GOOD condition.
    // This will help minimize the potential for interference with a user's
    // foreground applications utilizing the same resource.
    //
    // The GOOD policy template covers this scenario in addition to other
    // resources that most applications are likely to affect even when targeting
    // dedicated hardware.
    RETURN_IF_FAILED(CreateActivityCoordinatorPolicy(
        ACTIVITY_COORDINATOR_POLICY_TEMPLATE_GOOD,
        &policy));

    if (CanUseNpuPolicy()) {
        RETURN_IF_FAILED(SetActivityCoordinatorPolicyResourceCondition(
            policy.get(),
            ACTIVITY_COORDINATOR_RESOURCE_NPU,
            ACTIVITY_COORDINATOR_CONDITION_GOOD));
    }

    // Proceed to use Activity Coordinator to run opportunistic work. See the
    // example project in the documentation for further details.

    return S_OK;
}

Weitere Informationen