中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

php網(wǎng)站開發(fā)實例教程簡介關(guān)鍵詞優(yōu)化怎么優(yōu)化

php網(wǎng)站開發(fā)實例教程簡介,關(guān)鍵詞優(yōu)化怎么優(yōu)化,云南建設(shè)注冊考試中心網(wǎng)站,網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷文章本主題演示如何創(chuàng)作和使用自己的完成源類&#xff0c;類似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代碼 下面的列表中的代碼作為示例提供。 其目的是說明如何編寫自己的版本。 例如&#xff0c;支持取消和錯誤傳播不在此示例的范圍內(nèi)。 #include <w…

本主題演示如何創(chuàng)作和使用自己的完成源類,類似于 .NET 的?TaskCompletionSource。

completion_source 示例的源代碼

下面的列表中的代碼作為示例提供。 其目的是說明如何編寫自己的版本。 例如,支持取消和錯誤傳播不在此示例的范圍內(nèi)。

#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{};
};

將完成卸載到單獨的協(xié)同程序

本部分演示 completion_source 的一個用例。 在 Visual Studio 中創(chuàng)建一個基于 Windows 控制臺應(yīng)用程序 (C++/WinRT) 項目模板的新項目,然后將以下代碼清單粘貼到?main.cpp(根據(jù)上一節(jié)中的列表展開 completion_source 的定義)。

// main.cpp
#include "pch.h"#include <winrt/base.h>
#include <windows.h>template <typename T>
struct completion_source
{//構(gòu)造函數(shù)completion_source(){m_signal.attach(::CreateEvent(nullptr, true, false, nullptr));}void set(T const& value){m_value = value;::SetEvent(m_signal.get());//將指定的事件對象設(shè)置為信號狀態(tài)。}//準備bool await_ready() const noexcept{return ::WaitForSingleObject(m_signal.get(), 0) == 0;//等待指定的對象處于信號狀態(tài)或超時間隔已過。若要進入可警報等待狀態(tài),請使用 WaitForSingleObjectEx 函數(shù)。 若要等待多個對象,請使用 WaitForMultipleObjects。}//暫停void await_suspend(std::experimental::coroutine_handle<> resume){//CreateThreadpoolWait:創(chuàng)建新的等待對象。//參數(shù)1:[in] pfnwa 等待完成或超時時要調(diào)用的回調(diào)函數(shù)。//參數(shù)2:[in, out, optional] pv  要傳遞給回調(diào)函數(shù)的可選應(yīng)用程序定義數(shù)據(jù)。//參數(shù)3:[in, optional] pcbe 定義執(zhí)行回調(diào)的環(huán)境 的TP_CALLBACK_ENVIRON 結(jié)構(gòu)。 InitializeThreadpoolEnvironment 函數(shù)返回此結(jié)構(gòu)。如果此參數(shù)為 NULL,則回調(diào)在默認回調(diào)環(huán)境中執(zhí)行。 有關(guān)詳細信息,請參閱 InitializeThreadpoolEnvironment。m_wait.attach(winrt::check_pointer(::CreateThreadpoolWait(callback, resume.address(), nullptr)));::SetThreadpoolWait(m_wait.get(), m_signal.get(), nullptr);//設(shè)置 wait 對象,替換上一個等待對象(如果有)。 工作線程在句柄發(fā)出信號后或在指定的超時過期后調(diào)用 wait 對象的回調(diào)函數(shù)。}//返回m_valueT await_resume() const noexcept{return m_value;}private://回調(diào)函數(shù)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:指定某個函數(shù)是否可能會引發(fā)異常{::CloseThreadpoolWait(value);//釋放指定的等待對象。}//返回空指針static constexpr type invalid() noexcept    //constexpr:它表示 constant(常數(shù))表達式。 與 const 一樣,它可以應(yīng)用于變量:如果任何代碼試圖 modify(修改)該值,將引發(fā)編譯器錯誤。{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 中創(chuàng)建一個基于 Windows 控制臺應(yīng)用程序 (C++/WinRT) 項目模板的新項目,然后將以下代碼清單粘貼到?main.cpp(根據(jù)上一節(jié)中的列表展開 completion_source 的定義)。

// main.cpp
#include "pch.h"#include <winrt/base.h>
#include <windows.h>template <typename T>
struct completion_source
{//構(gòu)造函數(shù)completion_source(){m_signal.attach(::CreateEvent(nullptr, true, false, nullptr));}void set(T const& value){m_value = value;::SetEvent(m_signal.get());//將指定的事件對象設(shè)置為信號狀態(tài)。}//準備bool await_ready() const noexcept{return ::WaitForSingleObject(m_signal.get(), 0) == 0;//等待指定的對象處于信號狀態(tài)或超時間隔已過。若要進入可警報等待狀態(tài),請使用 WaitForSingleObjectEx 函數(shù)。 若要等待多個對象,請使用 WaitForMultipleObjects。}//暫停void await_suspend(std::experimental::coroutine_handle<> resume){//CreateThreadpoolWait:創(chuàng)建新的等待對象。//參數(shù)1:[in] pfnwa 等待完成或超時時要調(diào)用的回調(diào)函數(shù)。//參數(shù)2:[in, out, optional] pv  要傳遞給回調(diào)函數(shù)的可選應(yīng)用程序定義數(shù)據(jù)。//參數(shù)3:[in, optional] pcbe 定義執(zhí)行回調(diào)的環(huán)境 的TP_CALLBACK_ENVIRON 結(jié)構(gòu)。 InitializeThreadpoolEnvironment 函數(shù)返回此結(jié)構(gòu)。如果此參數(shù)為 NULL,則回調(diào)在默認回調(diào)環(huán)境中執(zhí)行。 有關(guān)詳細信息,請參閱 InitializeThreadpoolEnvironment。m_wait.attach(winrt::check_pointer(::CreateThreadpoolWait(callback, resume.address(), nullptr)));::SetThreadpoolWait(m_wait.get(), m_signal.get(), nullptr);//設(shè)置 wait 對象,替換上一個等待對象(如果有)。 工作線程在句柄發(fā)出信號后或在指定的超時過期后調(diào)用 wait 對象的回調(diào)函數(shù)。}//返回m_valueT await_resume() const noexcept{return m_value;}private://回調(diào)函數(shù)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:指定某個函數(shù)是否可能會引發(fā)異常{::CloseThreadpoolWait(value);//釋放指定的等待對象。}//返回空指針static constexpr type invalid() noexcept    //constexpr:它表示 constant(常數(shù))表達式。 與 const 一樣,它可以應(yīng)用于變量:如果任何代碼試圖 modify(修改)該值,將引發(fā)編譯器錯誤。{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://www.risenshineclean.com/news/61763.html

相關(guān)文章:

  • 在線安卓軟件開發(fā)優(yōu)化大師官網(wǎng)下載
  • 做優(yōu)化很好的網(wǎng)站常德政府網(wǎng)站市民留言
  • 深圳做網(wǎng)站的給說各種網(wǎng)站
  • 寧波網(wǎng)站優(yōu)化軟件網(wǎng)絡(luò)推廣seo怎么做
  • 網(wǎng)站程序是如何開發(fā)的百度搜索引擎優(yōu)化
  • 做的網(wǎng)站怎樣更新百度競價點擊一次多少錢
  • 福建設(shè)備公司網(wǎng)站百度24小時人工電話
  • 網(wǎng)站軟文偽原創(chuàng)企業(yè)營銷策略有哪些
  • 東莞網(wǎng)上商城網(wǎng)站建設(shè)南京seo公司
  • 河南省建設(shè)人才信息網(wǎng)官網(wǎng)自助優(yōu)化排名工具
  • 編程軟件自學(xué)網(wǎng)百度關(guān)鍵詞自然排名優(yōu)化公司
  • 東莞網(wǎng)站建設(shè)是什么意思西安seo培訓(xùn)學(xué)校
  • 設(shè)計相關(guān)網(wǎng)站武漢企業(yè)seo推廣
  • 網(wǎng)站建設(shè)編程語言常用的seo查詢工具有哪些
  • 做3d模型的叫什么牛的網(wǎng)站色盲眼中的世界
  • 用訂制音樂網(wǎng)站做的音樂算原創(chuàng)嗎百度關(guān)鍵詞優(yōu)化專家
  • 手機端網(wǎng)站制作seo推廣有哪些
  • 外管局網(wǎng)站做延期收匯報告推廣排名seo
  • 怎么樣自己做網(wǎng)站賺錢年入40萬百度推廣代理商加盟
  • wordpress includeseo網(wǎng)站分析
  • wordpress出現(xiàn)兩個首頁關(guān)鍵詞優(yōu)化的最佳方法
  • 佛山移動網(wǎng)站建設(shè)公司seo搜索優(yōu)化公司
  • 服務(wù)器在美國的網(wǎng)站seosem是指什么意思
  • 北京h5網(wǎng)站開發(fā)公司北京網(wǎng)站
  • 我?guī)驮p騙團伙做詐騙網(wǎng)站獲利留電話的廣告網(wǎng)站
  • 武漢教育網(wǎng)站建設(shè)優(yōu)化發(fā)帖平臺
  • 網(wǎng)頁建設(shè)類有哪些軟件seo營銷
  • 織夢手機網(wǎng)站制作教程seo站長平臺
  • ts wordpress網(wǎng)站優(yōu)化建議
  • 網(wǎng)站流量 名詞洛陽seo網(wǎng)絡(luò)推廣