XUserCloseHandle
关闭特定用户句柄。
语法
void XUserCloseHandle(
XUserHandle user
)
参数
user _In_
类型:XUserHandle
要关闭的用户句柄。
返回值
类型:void
备注
必须为从 XUser API 检索到的每个 XUserHandle 句柄只调用一次 XUserCloseHandle 函数。 您还可以通过调用 XUserCloseHandle 函数关闭表示该用户的所有句柄。
下面的示例演示如何将用户异步添加到游戏会话。
HRESULT AddUserComplete(XAsyncBlock* ab)
{
unique_user_handle user;
RETURN_IF_FAILED(XUserAddResult(ab, &user));
XUserLocalId userLocalId;
XUserGetLocalId(user.get(), &userLocalId);
auto iter = std::find_if(
_users.begin(),
_users.end(),
[&userLocalId](const User& candidate)
{
XUserLocalId candidateUserLocalId;
XUserGetLocalId(candidate.Handle(), &candidateUserLocalId);
return candidateUserLocalId == userLocalId;
});
// User already known
if (iter != _users.end())
{
appLog.AddLog("User already in list\n");
return S_OK;
}
try
{
_users.emplace_back(user.get());
_users.back().LoadGamerPicAsync(_queue);
}
CATCH_RETURN();
return S_OK;
}
HRESULT AddUser(bool allowGuests, bool silent)
{
auto asyncBlock = std::make_unique<XAsyncBlock>();
ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
asyncBlock->queue = _queue;
asyncBlock->context = this;
asyncBlock->callback = [](XAsyncBlock* ab)
{
auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
LOG_IF_FAILED(static_cast<UserWindow*>(ab->context)->AddUserComplete(ab));
};
XUserAddOptions options = XUserAddOptions::None;
if (allowGuests)
{
WI_SET_FLAG(options, XUserAddOptions::AllowGuests);
}
if (silent)
{
WI_SET_FLAG(options, XUserAddOptions::AddDefaultUserSilently);
}
if (SUCCEEDED_LOG(XUserAddAsync(
options,
asyncBlock.get())))
{
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
// If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
asyncBlock.release();
}
return S_OK;
}
要求
头文件:XUser.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机