XPackageChangeChunkInstallOrder
指定首先安装哪些选定的区块。
语法
HRESULT XPackageChangeChunkInstallOrder(
const char* packageIdentifier,
uint32_t selectorCount,
XPackageChunkSelector* selectors
)
参数
packageIdentifier _In_z_
类型:char*
唯一标识磁盘上安装的包的字符串。 有关包标识符的详细信息,请参阅管理和许可可下载内容 (DLC)。
selectorCount _In_
类型:uint32_t
selectors 参数中的选择器数。
selectors _In_reads_(selectorCount)
类型:XPackageChunkSelector*
指定要受到影响的区块类型的选择器数组。
返回值
类型:HRESULT
HRESULT 成功或错误代码。
备注
注意
在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程。
XPackageChangeChunkInstallOrder 更新由指定选择器选择的区块,以便首先放置在安装队列中。 这可以采用选择器,而不仅仅是区块 ID 的数组。 您可以在此处传递更复杂的选择器,并且将使它们保持正常运行的区块全部推送到队列的前面。
您可以随时调用 XPackageChangeChunkInstallOrder,而不是仅在未安装这些区块时调用。 如果已安装这些区块,XPackageChangeChunkInstallOrder 将会忽略它们。 如果您提供的区块因智能传递而完全没有按计划安装,则情况也是如此。
在下面的示例中,为使用户继续玩游戏,游戏必须访问名为“soon”的文件。 定义了函数 PrioritizeChunk,用于检查该区块的当前安装状态。 如果尚未安装此区块,则此函数将要求流式系统首先安装该区块,然后返回可监视区块进度的安装监视器。 如果已安装区块,此函数返回 null 监视器。
HRESULT PrioritizeChunk(
XTaskQueueHandle queue, uint32_t chunkId, XPackageInstallationMonitorHandle* monitor)
{
char id[XPACKAGE_IDENTIFIER_MAX_LENGTH];
*monitor = nullptr;
HRESULT hr = XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
if (FAILED(hr)) return hr;
XPackageChunkSelector selector;
selector.type = XPackageChunkSelectorType::Chunk;
selector.chunkId = chunkId;
hr = XPackageCreateInstallationMonitor(id, 1, &selector, 1000, queue, monitor);
if (SUCCEEDED(hr))
{
XPackageInstallationProgress progress;
XPackageGetInstallationProgress(*monitor, &progress);
}
if (!progress.completed)
{
hr = XPackageChangeChunkInstallOrder(id, 1, &selector);
}
if (progress.completed || FAILED(hr))
{
XPackageCloseInstallationMonitorHandle(*monitor);
*monitor = nullptr;
}
return hr;
}
要求
头文件:XPackage.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机