> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XPackageCreateInstallationMonitor

> XPackageCreateInstallationMonitor

# XPackageCreateInstallationMonitor

설치 상태를 모니터링하는 모니터를 만듭니다.

## 구문

```cpp theme={null}
HRESULT XPackageCreateInstallationMonitor(  
         const char* packageIdentifier,  
         uint32_t selectorCount,  
         XPackageChunkSelector* selectors,  
         uint32_t minimumUpdateIntervalMs,  
         XTaskQueueHandle queue,  
         XPackageInstallationMonitorHandle* installationMonitor  
)  
```

### 매개 변수

*packageIdentifier*   \_In\_z\_\
형식: char\*

디스크에 설치된 패키지를 고유하게 식별하는 문자열입니다. 패키지 식별자에 대한 자세한 내용은 [다운로드 가능한 콘텐츠(DLC) 관리 및 라이선스](https://learn.microsoft.com/gaming/gdk/docs/store/commerce/fundamentals/xstore-manage-and-license-optional-packages)를 참조하세요.

*selectorCount*   \_In\_\
형식: uint32\_t

*selectors* 매개 변수의 선택자 수입니다.

*selectors*   \_In\_reads\_opt\_(selectorCount)\
형식: [XPackageChunkSelector\*](/reference/system/xpackage/structs/xpackagechunkselector)

모니터링할 청크를 지정하는 선택자 배열입니다.

*minimumUpdateIntervalMs*   \_In\_\
형식: uint32\_t

모니터의 해상도(밀리초)입니다.

*queue*   \_In\_opt\_\
형식: XTaskQueueHandle

업데이트가 수행되는 큐입니다.

*installationMonitor*   \_Out\_\
형식: XPackageInstallationMonitorHandle\*

반환 시 만들어진 설치 모니터를 가리킵니다.

### 반환 값

형식: HRESULT

HRESULT 성공 또는 오류 코드입니다.

## 설명

<Note>이 함수는 시간에 민감한 스레드에서 호출해서는 안전하지 않습니다. 자세한 내용은 [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)를 참조하세요.</Note>

**XPackageCreateInstallationMonitor**는 설치 상태를 추적하는 모니터를 만듭니다. 모니터는 지정된 업데이트 간격에 의해 결정된 일정한 주기로 자체 업데이트 및 새로 고침을 수행합니다. 업데이트는 지정된 작업 큐에서 예약됩니다. 간격을 0으로 지정하면 업데이트를 수행하지 않으며, 일회성 스냅샷 형태의 설치 모니터가 생성됩니다. 간격을 0으로 전달하는 경우 queue 매개 변수는 null일 수 있습니다.

설치의 현재 진행률을 가져오려면 [XPackageGetInstallationProgress](/reference/system/xpackage/functions/xpackagegetinstallationprogress)를 호출합니다. 설치 중 변경 알림을 받으려면 콜백을 등록합니다. 이 설치 모니터는 전체 패키지 또는 특정 하위 집합에 대해 만들 수 있습니다.

게임이 완전히 설치되기 전에 실행될 수 있도록 실행 마커를 구현했습니다. 게임은 어떤 부분이 설치되었고 어떤 부분이 설치되지 않았는지 알아야 합니다. 이 예제에서 게임은 지정된 트랙 이름의 레이스트랙과 연결된 청크가 언제 설치되는지 알아야 합니다.

```cpp theme={null}
void CALLBACK ProgressChangedCallback(
    void* /* context*/,
    XPackageInstallationMonitorHandle monitor)
{
    XPackageInstallationProgress progress;
    XPackageGetInstallationProgress(monitor, &progress);

    if (progress.completed)
    {
        printf("Track ready\n");
        XPackageCloseInstallationMonitorHandle(monitor);
    }
}

HRESULT StartMonitoring(XTaskQueueHandle queue, char* trackName)
{
    char id[XPACKAGE_IDENTIFIER_MAX_LENGTH];

    HRESULT hr = XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
    if (FAILED(hr)) return hr;

    XPackageChunkSelector selector;
    selector.type = XPackageChunkSelectorType::Tag;
    selector.tag = trackName;

    XPackageInstallationMonitorHandle monitor;
    hr = XPackageCreateInstallationMonitor(
        id,         // 모니터링할 ID
        1,          // 선택자 수
        &selector,  // 선택자
        1000,       // 모니터의 해상도(밀리초)
        queue,      // 업데이트가 수행되는 큐
        &monitor);
    if (FAILED(hr)) return hr;

    XTaskQueueRegistrationToken token;
    hr = XPackageRegisterInstallationProgressChanged(
        monitor,
        nullptr,
        ProgressChangedCallback,
        &token);

    if (FAILED(hr))
    {
        XPackageCloseInstallationMonitorHandle(monitor);
    }

    return hr;
}
```

위 코드에서 각 API 호출을 살펴보겠습니다.

```cpp theme={null}
XPackageGetCurrentProcessPackageIdentifier(_countof(id), id); 
```

설치된 모든 콘텐츠에는 고유 식별자가 있습니다. 패키지 식별자를 알고 있고 해당 콘텐츠에 액세스할 수 있는 경우 어떤 패키지의 설치든 모니터링할 수 있습니다. 실행 중인 프로세스는 자체 패키지 식별자를 가져올 수 있습니다.

```cpp theme={null}
XPackageCreateInstallationMonitor( 
    id,         // 모니터링할 ID 
    1,          // 선택자 수 
    &selector,  // 선택자 
    1000,       // 모니터의 해상도(밀리초) 
    queue,      // 업데이트가 수행되는 큐 
    &monitor));  
```

이것은 설치 상태를 추적하는 모니터를 만듭니다. 이 설치 모니터는 정기적인 주기로 스스로 업데이트됩니다. 설치의 현재 진행률을 가져오려면 [XPackageGetInstallationProgress](/reference/system/xpackage/functions/xpackagegetinstallationprogress)를 호출합니다. 설치 중 변경 알림을 받으려면 콜백을 등록합니다.

전체 패키지 또는 특정 하위 집합에 대한 설치 모니터를 만들 수 있습니다. 여기서는 트랙 이름에 대한 설치 진행률을 알고 싶다고 하는 “선택자”를 정의했습니다. 설치 모니터가 진행률 스냅샷을 얼마나 자주 업데이트할지 나타내는 빈도(이 경우 1000ms)를 지정하여 이 속도까지 업데이트되도록 할 수 있습니다. 시간 내에 진행이 이루어지지 않은 경우에는 더 느릴 수 있습니다.

```cpp theme={null}
hr = XPackageRegisterInstallationProgressChanged(
    monitor,
    nullptr,
    ProgressChangedCallback,
    &token);
```

트랙 로딩이 언제 완료되는지 알고 싶으므로 모니터에 진행률 변경 이벤트를 등록합니다. 이 콜백은 모니터가 생성될 때 제공된 작업 큐를 통해 호출되며, 대략 [XPackageCreateInstallationMonitor](/reference/system/xpackage/functions/xpackagecreateinstallationmonitor)에서 지정한 주기로 호출됩니다. 콜백 내에서 게임 내 진행률을 렌더링하거나 게임에 트랙이 준비되었음을 알릴 수 있습니다.

이 예제에서는 설치 모니터를 닫지만 알림을 등록 취소하지 않습니다. 설치 모니터 알림의 수명은 설치 모니터에 연결되어 있으므로, 모니터를 닫으면 모니터에 대한 모든 알림이 등록 취소됩니다.

## 요구 사항

**헤더:** XPackage.h

**라이브러리:** xgameruntime.lib

**지원 플랫폼:** Windows, XBOX One 제품군 콘솔 및 XBOX Series 콘솔

## 개념 문서

* [스트리밍 설치: 상태](/build/core-features/common/packaging/packaging-installstatus)
* [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)
* [업데이트 확인](https://learn.microsoft.com/gaming/gdk/docs/store/commerce/fundamentals/xstore-checking-for-updates)

## 함께 보기

[XPackage](/reference/system/xpackage/xpackage_members)


## Related topics

- [XPackageInstallationProgressCallback](/ko/reference/system/xpackage/functions/xpackageinstallationprogresscallback.md)
- [XPackageRegisterInstallationProgressChanged](/ko/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged.md)
- [스트리밍 설치: 상태](/ko/build/core-features/common/packaging/packaging-installstatus.md)
- [XPackageCloseInstallationMonitorHandle](/ko/reference/system/xpackage/functions/xpackagecloseinstallationmonitorhandle.md)
- [업데이트 확인](/ko/publishing/xstore-commerce/xstore-checking-updates.md)
