boost coroutine2 的簡單使用

2021-10-04 20:46:12 字數 1449 閱讀 1777

使用場景

本文主要介紹了怎麼通過 boost::coroutine2 來在 c++ **中使用協程,詳細的介紹請移步 boost::coroutine2 文件。

乙個協程可以認為是把**分成了兩個部分,而我們可以控制執行權在這兩部分跳轉,每次跳轉同時也可以傳遞資料。boost::coroutine2 提供的是非對稱協程(asymmetric coroutines),將**分成的兩個部分有呼叫和被呼叫者關係。

boost::coroutine2 提供的協程只能單向傳遞資料,資料只能單向的從乙個**塊流向另乙個**塊。流入流出分別對應著 push_type 和 pull_type 型別,由這兩個型別組成協程間跳轉的通道,同時也是資料傳遞的通道。

#include

從協程中獲取資料

using coro_t = boost::coroutines2::coroutine<

int>

;auto source = coro_t::

pull_type([

](coro_t::push_type & yield)})

;for

(auto value : source)

輸出:01

2

向協程中放置資料

using coro_t = boost::coroutines2::coroutine<

int>

;auto sink = coro_t::

push_type([

](coro_t::pull_type & acquire)})

;for

(auto i =

0; i !=3;

++i)

輸出:01

2

push_type 和 pull_type 都有 operator bool,在返回 false(協程結束了) 時,不能在放入資料或者獲取資料。

pull_type 可以通過 begin() 獲得迭代器,也可以通過呼叫 get 獲取值,通過 operator() 來轉換控制權。

pull_type 應該先呼叫 get 在呼叫 operator()。

using coro_t = boost::coroutines2::coroutine<

int>

;auto source = coro_t::

pull_type([

](coro_t::push_type & yield)})

;while

(true

)source()

;}

輸出:

1 2 3 4 5 6 7 8 9 10

轉 A2W W2A T2A T2W 等巨集

如果你覺得使用 widechartomultibyte,multibytetowidechar 等函式比較麻煩 眾多的引數,緩衝區的分配與銷毀等。那麼可以使用 a2w w2a t2a t2w 等巨集來代替,它們對上面兩個函式進行了封裝。在使用這些巨集之前,應該包含標頭檔案 atlconv.h 並在呼...

2 基礎控制項2

transform 的預設值為 1,0,0,1,0,0 nslog nsstringfrom 可以列印其他型別的 比如類 affine transform a ffine transform 的初始化為 make make 只能改變一次 不可重複改變 如果想要重複改變 則使用去掉 make 的方法t...

什麼是P2P,O2O,B2B,B2C,C2C模式

最近網際網路行業各種to的模式搞得人暈頭轉向,我也是在這整理一下,防止在聽別人裝b的時候對答不流 p2p peer to peer 對等網路 可以簡單的定義成通過直接交換來共享計算機資源和服務,而對等計算模型應用層形成的網路通常稱為對等網路。在p2p網路環境中,成千上萬臺彼此連線的計算機都處於對等的...