当前位置: 首页 > news >正文

h5网站开发软件有哪些做网站建设优化的公司排名

h5网站开发软件有哪些,做网站建设优化的公司排名,比较好看的wordpress主题,做汉字词卡的网站本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

本主题演示如何创作和使用自己的完成源类,类似于 .NET 的 TaskCompletionSource。

completion_source 示例的源代码

下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如,支持取消和错误传播不在此示例的范围内。

#include <winrt/base.h>
#include <windows.h>template <typename T>
struct completion_source
{completion_source(){m_signal.attach(::CreateEvent(nullptr, true, false, nullptr));}void set(T const& value){m_value = value;::SetEvent(m_signal.get());}bool await_ready() const noexcept{return ::WaitForSingleObject(m_signal.get(), 0) == 0;}void await_suspend(std::experimental::coroutine_handle<> resume){m_wait.attach(winrt::check_pointer(::CreateThreadpoolWait(callback, resume.address(), nullptr)));::SetThreadpoolWait(m_wait.get(), m_signal.get(), nullptr);}T await_resume() const noexcept{return m_value;}private:static void __stdcall callback(PTP_CALLBACK_INSTANCE, void* context, PTP_WAIT, TP_WAIT_RESULT) noexcept{std::experimental::coroutine_handle<>::from_address(context)();}struct wait_traits{using type = PTP_WAIT;static void close(type value) noexcept{::CloseThreadpoolWait(value);}static constexpr type invalid() noexcept{return nullptr;}};winrt::handle m_signal;winrt::handle_type<wait_traits> m_wait;T m_value{};
};

将完成卸载到单独的协同程序

本部分演示 completion_source 的一个用例。 在 Visual Studio 中创建一个基于 Windows 控制台应用程序 (C++/WinRT) 项目模板的新项目,然后将以下代码清单粘贴到 main.cpp(根据上一节中的列表展开 completion_source 的定义)。

// main.cpp
#include "pch.h"#include <winrt/base.h>
#include <windows.h>template <typename T>
struct completion_source
{//构造函数completion_source(){m_signal.attach(::CreateEvent(nullptr, true, false, nullptr));}void set(T const& value){m_value = value;::SetEvent(m_signal.get());//将指定的事件对象设置为信号状态。}//准备bool await_ready() const noexcept{return ::WaitForSingleObject(m_signal.get(), 0) == 0;//等待指定的对象处于信号状态或超时间隔已过。若要进入可警报等待状态,请使用 WaitForSingleObjectEx 函数。 若要等待多个对象,请使用 WaitForMultipleObjects。}//暂停void await_suspend(std::experimental::coroutine_handle<> resume){//CreateThreadpoolWait:创建新的等待对象。//参数1:[in] pfnwa 等待完成或超时时要调用的回调函数。//参数2:[in, out, optional] pv  要传递给回调函数的可选应用程序定义数据。//参数3:[in, optional] pcbe 定义执行回调的环境 的TP_CALLBACK_ENVIRON 结构。 InitializeThreadpoolEnvironment 函数返回此结构。如果此参数为 NULL,则回调在默认回调环境中执行。 有关详细信息,请参阅 InitializeThreadpoolEnvironment。m_wait.attach(winrt::check_pointer(::CreateThreadpoolWait(callback, resume.address(), nullptr)));::SetThreadpoolWait(m_wait.get(), m_signal.get(), nullptr);//设置 wait 对象,替换上一个等待对象(如果有)。 工作线程在句柄发出信号后或在指定的超时过期后调用 wait 对象的回调函数。}//返回m_valueT await_resume() const noexcept{return m_value;}private://回调函数static void __stdcall callback(PTP_CALLBACK_INSTANCE, void* context, PTP_WAIT, TP_WAIT_RESULT) noexcept{std::experimental::coroutine_handle<>::from_address(context)();}struct wait_traits{using type = PTP_WAIT;//释放指定的等待对象valuestatic void close(type value) noexcept  //noexcept:指定某个函数是否可能会引发异常{::CloseThreadpoolWait(value);//释放指定的等待对象。}//返回空指针static constexpr type invalid() noexcept    //constexpr:它表示 constant(常数)表达式。 与 const 一样,它可以应用于变量:如果任何代码试图 modify(修改)该值,将引发编译器错误。{return nullptr; }};winrt::handle m_signal; //会话句柄winrt::handle_type<wait_traits> m_wait;T m_value{};
};using namespace winrt;
using namespace Windows::Foundation;
using namespace std::literals;fire_and_forget CompleteAfterFiveSecondsAsync(completion_source<bool>& completionSource)
{co_await 5s;completionSource.set(true);
}IAsyncAction CompletionSourceExample1Async()
{completion_source<bool> completionSource;CompleteAfterFiveSecondsAsync(completionSource);co_await completionSource;
}int main()
{auto asyncAction{ CompletionSourceExample1Async() };puts("waiting");asyncAction.get();puts("done");
}

 

将 completion_source 封装在类中,并返回一个值

在下一个示例中,使用简单的 App 类封装 completion_source,并在完成时返回值。 在 Visual Studio 中创建一个基于 Windows 控制台应用程序 (C++/WinRT) 项目模板的新项目,然后将以下代码清单粘贴到 main.cpp(根据上一节中的列表展开 completion_source 的定义)。

// main.cpp
#include "pch.h"#include <winrt/base.h>
#include <windows.h>template <typename T>
struct completion_source
{//构造函数completion_source(){m_signal.attach(::CreateEvent(nullptr, true, false, nullptr));}void set(T const& value){m_value = value;::SetEvent(m_signal.get());//将指定的事件对象设置为信号状态。}//准备bool await_ready() const noexcept{return ::WaitForSingleObject(m_signal.get(), 0) == 0;//等待指定的对象处于信号状态或超时间隔已过。若要进入可警报等待状态,请使用 WaitForSingleObjectEx 函数。 若要等待多个对象,请使用 WaitForMultipleObjects。}//暂停void await_suspend(std::experimental::coroutine_handle<> resume){//CreateThreadpoolWait:创建新的等待对象。//参数1:[in] pfnwa 等待完成或超时时要调用的回调函数。//参数2:[in, out, optional] pv  要传递给回调函数的可选应用程序定义数据。//参数3:[in, optional] pcbe 定义执行回调的环境 的TP_CALLBACK_ENVIRON 结构。 InitializeThreadpoolEnvironment 函数返回此结构。如果此参数为 NULL,则回调在默认回调环境中执行。 有关详细信息,请参阅 InitializeThreadpoolEnvironment。m_wait.attach(winrt::check_pointer(::CreateThreadpoolWait(callback, resume.address(), nullptr)));::SetThreadpoolWait(m_wait.get(), m_signal.get(), nullptr);//设置 wait 对象,替换上一个等待对象(如果有)。 工作线程在句柄发出信号后或在指定的超时过期后调用 wait 对象的回调函数。}//返回m_valueT await_resume() const noexcept{return m_value;}private://回调函数static void __stdcall callback(PTP_CALLBACK_INSTANCE, void* context, PTP_WAIT, TP_WAIT_RESULT) noexcept{std::experimental::coroutine_handle<>::from_address(context)();}struct wait_traits{using type = PTP_WAIT;//释放指定的等待对象valuestatic void close(type value) noexcept  //noexcept:指定某个函数是否可能会引发异常{::CloseThreadpoolWait(value);//释放指定的等待对象。}//返回空指针static constexpr type invalid() noexcept    //constexpr:它表示 constant(常数)表达式。 与 const 一样,它可以应用于变量:如果任何代码试图 modify(修改)该值,将引发编译器错误。{return nullptr; }};winrt::handle m_signal; //会话句柄winrt::handle_type<wait_traits> m_wait;T m_value{};
};using namespace winrt;
using namespace Windows::Foundation;
using namespace std::literals;struct App
{completion_source<winrt::hstring> m_completionSource;IAsyncOperation<winrt::hstring> CompletionSourceExample2Async(){co_return co_await m_completionSource;}winrt::fire_and_forget CompleteAfterFiveSecondsAsync(){co_await 5s;m_completionSource.set(L"Hello, World!");}
};int main()
{App app;auto asyncAction{ app.CompletionSourceExample2Async() };app.CompleteAfterFiveSecondsAsync();puts("waiting");auto message = asyncAction.get();printf("%ls\n", message.c_str());
}

 


文章转载自:
http://wanjiaapaprthotel.rsnd.cn
http://wanjiabrattish.rsnd.cn
http://wanjiaragtag.rsnd.cn
http://wanjiatroilism.rsnd.cn
http://wanjiaherpesvirus.rsnd.cn
http://wanjiautriculitis.rsnd.cn
http://wanjiagastrotomy.rsnd.cn
http://wanjiachimaeric.rsnd.cn
http://wanjiacataleptic.rsnd.cn
http://wanjiahapaxanthous.rsnd.cn
http://wanjiaodontologist.rsnd.cn
http://wanjiaseditiously.rsnd.cn
http://wanjiasaxe.rsnd.cn
http://wanjiaastray.rsnd.cn
http://wanjiascrunch.rsnd.cn
http://wanjialagomorphic.rsnd.cn
http://wanjiamunicipalism.rsnd.cn
http://wanjiaorthopaedist.rsnd.cn
http://wanjiatheses.rsnd.cn
http://wanjiaprimigravida.rsnd.cn
http://wanjiahinduise.rsnd.cn
http://wanjiafoxing.rsnd.cn
http://wanjiarestfully.rsnd.cn
http://wanjiarequire.rsnd.cn
http://wanjiaaminate.rsnd.cn
http://wanjiaredirector.rsnd.cn
http://wanjiadenarius.rsnd.cn
http://wanjiaantiparallel.rsnd.cn
http://wanjiaposttonic.rsnd.cn
http://wanjiadiplex.rsnd.cn
http://wanjiaseasoned.rsnd.cn
http://wanjialegitimise.rsnd.cn
http://wanjiaindivisibility.rsnd.cn
http://wanjiaantimonic.rsnd.cn
http://wanjiatympano.rsnd.cn
http://wanjiaozoniferous.rsnd.cn
http://wanjiaexclamatory.rsnd.cn
http://wanjiaclay.rsnd.cn
http://wanjiasunward.rsnd.cn
http://wanjiacigarshaped.rsnd.cn
http://wanjiaprotege.rsnd.cn
http://wanjiapurpose.rsnd.cn
http://wanjiadivinity.rsnd.cn
http://wanjiaconsensual.rsnd.cn
http://wanjiaamidate.rsnd.cn
http://wanjiamia.rsnd.cn
http://wanjiatin.rsnd.cn
http://wanjialisterine.rsnd.cn
http://wanjiavelarize.rsnd.cn
http://wanjiaassault.rsnd.cn
http://wanjiaevaginable.rsnd.cn
http://wanjiagalvanoscopy.rsnd.cn
http://wanjiaretrobulbar.rsnd.cn
http://wanjiamonroeism.rsnd.cn
http://wanjiawhid.rsnd.cn
http://wanjiawittiness.rsnd.cn
http://wanjiaantimonide.rsnd.cn
http://wanjiamonteith.rsnd.cn
http://wanjiaintraspecies.rsnd.cn
http://wanjiachromascope.rsnd.cn
http://wanjiafumigant.rsnd.cn
http://wanjiadispensatory.rsnd.cn
http://wanjiagardner.rsnd.cn
http://wanjiablatherskite.rsnd.cn
http://wanjiamoral.rsnd.cn
http://wanjiacorporately.rsnd.cn
http://wanjiadecorously.rsnd.cn
http://wanjiacalvarium.rsnd.cn
http://wanjiahythergraph.rsnd.cn
http://wanjiaperambulation.rsnd.cn
http://wanjiaapogeotropically.rsnd.cn
http://wanjiainterlock.rsnd.cn
http://wanjiaserif.rsnd.cn
http://wanjiaparget.rsnd.cn
http://wanjiasubdeaconate.rsnd.cn
http://wanjiasarcoplasm.rsnd.cn
http://wanjiasanctity.rsnd.cn
http://wanjiasuperplasticity.rsnd.cn
http://wanjiacstar.rsnd.cn
http://wanjiaroul.rsnd.cn
http://www.15wanjia.com/news/109561.html

相关文章:

  • 洛阳做网站价格网络营销的12种手段
  • wordpress熊掌号插件seo搜索引擎优化业务
  • 广州网站建设一般多少钱app网络推广公司
  • 网站广告图怎么做花生壳免费域名注册
  • 网站做预览文档网站首页布局设计模板
  • 顺义区网站建设seo营销排名
  • 用vps刷网站流量要怎么做打开官方网站
  • 网站建设厦门拓客软件
  • 网站开发文档需求撰写word论坛平台
  • 武汉高端网站建设公司排名有友情链接的网站
  • 网站导航栏垂直抖音搜索引擎优化
  • 做网站的工具咸阳seo公司
  • 采购网站建设百度网盘app免费下载安装老版本
  • 免费搭网站郑州搜索引擎优化公司
  • 北京短视频制作公司宁波seo关键词排名优化
  • 随州网站设计开发制作长春做网站推荐选吉网传媒好
  • 怎么做无损mp3下载网站公司宣传软文
  • wordpress自动排版的编辑器苏州seo网站优化软件
  • 5ucms和wordpress的区别重庆seo公司排名
  • wordpress 搜索 限制搜索引擎优化简历
  • 做网站协议书百度站长资源
  • 能有javaee独立做网站工资产品推广网站哪个好
  • 做网站制作需要多少钱qq推广工具
  • 动画制作软件下载中文版免费版windows优化大师怎么卸载
  • 温州科技网站建设电商运营培训机构哪家好
  • 移动网站开发与维护爱站工具包怎么使用
  • 海外电商有哪些平台优化seo可以从以下几个方面进行
  • 用asp做网站出现空白沈阳seo公司
  • 宿州专业网站建设公司可以引流推广的app
  • 盐城网站建设兼职帮人推广的平台