gpt4 book ai didi

c++ - 停止异步 ISearchJob 的正确方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:18 27 4
gpt4 key购买 nike

我将使用 WUA API并以这种方式开始执行异步搜索更新:

CComPtr<SearchCallbackImpl> iscc_; <<-- Note you need to CreateInstance
CComPtr<ISearchJob> pUpJob_;
pUpJob_ = NULL;

pUpSearcher_->BeginSearch(
CComVariant(criteria.c_str()).bstrVal,
iscc_,
CComVariant(L"Scanning"),
&pUpJob_);

当我需要停止我的程序,但是ISearchJob 尚未完成,我使用此代码:

if (pUpJob_)
{
CComVariant isStopped;
pUpJob_->get_IsCompleted(&isStopped.boolVal);
if (isStopped.boolVal == VARIANT_FALSE)
{
if (SUCCEEDED(pUpJob_->RequestAbort()))
{
pUpJob_->CleanUp();
pUpJob_.Release();
}
}
}

此代码通常有效,但有时它卡在 pUpJob_->CleanUp(); 上,我无法正确停止我的程序。

所以我的问题是:

  1. 停止的正确方法是什么asynchronous search job for updates
  2. 另外我误解了ISearchJob::CleanUp之间的区别和 ISearchJob::RequestAbort以及如何使用此方法正确停止异步搜索?
  3. 这些方法应该一起使用还是单独使用?

最佳答案

RequestAbort() 也是异步的(名称中有提示)。调用之后,你应该调用pUpSearcher_->EndSearch();如果中止成功,它将返回 ResultCode 等于 orcAborted 的 ISearchResult。 然后您可以释放您的资源。

我不完全确定应该如何使用 CleanUp(),但是 this page似乎暗示它适用于具有回调的脚本,并且您不应该从回调中调用 CleanUp() 。不确定您的取消代码在哪里运行。

关于c++ - 停止异步 ISearchJob 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40018357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com