c++中boost协程5种使用实例
生活随笔
收集整理的這篇文章主要介紹了
c++中boost协程5种使用实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[java] view plaincopy #include?<iostream>?? #include?<boost/coroutine/all.hpp>???? ?? ?? using?namespace?boost::coroutines;?? ?? //coroutine函數?? void?cooperative(coroutine<void>::push_type?&sink)?? {?? ????std::cout?<<?"Hello";?? ?? ????//之所以能夠執行是因為重載了操作符()?? ????//返回main()函數繼續運行?? ????sink();?? ?? ????std::cout?<<?"world";?? ?? ????//執行完畢,返回main繼續執行?? }?? ?? int?main()?? {?? ????//c++11新特性:統一初始化?? ????//source對象由于是pull_type類型,所以會馬上調用cooperative,?push_type類型不會立即執行?? ????coroutine<void>::pull_type?source{?cooperative?};?? ?????? ????std::cout?<<?",?";?? ?? ????//返回cooperative函數繼續執行?? ????source();?? ?? ????std::cout?<<?"!";?? ?? ????std::cout?<<?"\n";?? }?
#include?<functional>?? #include?<iostream>?? #include?<boost/coroutine/all.hpp>?? ?? ?? using?boost::coroutines::coroutine;?? ?? void?cooperative(coroutine<int>::push_type?&sink,?int?i)?? {?? ????int?j?=?i;?? ?? ????//調用main?? ????sink(++j);?? ?? ????//調用main?? ????sink(++j);?? ?? ????std::cout?<<?"end\n";?? }?? ?? int?main()?? {?? ????using?std::placeholders::_1;?? ?? ????//傳入一個參數,初始值為0?? ????coroutine<int>::pull_type?source{?std::bind(cooperative,?_1,?0)?};?? ????std::cout?<<?source.get()?<<?'\n';?? ?? ????//調用cooperative?? ????source();?? ????std::cout?<<?source.get()?<<?'\n';?? ?? ????//調用cooperative?? ????source();?? }?
[java] view plaincopy#include?<tuple>?? #include?<string>?? #include?<iostream>?? #include?<boost/coroutine/all.hpp>?? ?? ?? using?boost::coroutines::coroutine;?? ?? void?cooperative(coroutine<std::tuple<int,?std::string>>::pull_type?&source)?? {?? ????auto?args?=?source.get();?? ????std::cout?<<?std::get<0>(args)?<<?"?"?<<?std::get<1>(args)?<<?'\n';?? ?? ????source();?? ?? ????args?=?source.get();?? ????std::cout?<<?std::get<0>(args)?<<?"?"?<<?std::get<1>(args)?<<?'\n';?? }?? ?? int?main()?? {?? ????coroutine<std::tuple<int,?std::string>>::push_type?sink{?cooperative?};?? ?? ????//通過tuple傳遞多個參數?? ????sink(std::make_tuple(0,?"aaa"));?? ?? ????//通過tuple傳遞多個參數?? ????sink(std::make_tuple(1,?"bbb"));?? ?? ????std::cout?<<?"end\n";?? }??
#include <iostream>
#include <cstdlib>#include <boost/coroutine2/all.hpp>int main()
{
int i = 0;
boost::coroutines2::coroutine< void >::push_type sink(
[&](boost::coroutines2::coroutine< void >::pull_type & source) {
std::cout << "inside coroutine-fn" << std::endl;
});
sink();std::cout << "\nDone" << std::endl;return EXIT_SUCCESS;}
#include <stdexcept>
#include <iostream>
#include <boost/coroutine/all.hpp> using boost::coroutines::coroutine; void cooperative(coroutine<void>::push_type &sink)
{ //返回main sink(); throw std::runtime_error("error");
} int main()
{ coroutine<void>::pull_type source{ cooperative }; try { //調用cooperative source(); //捕獲拋出的異常std::runtime_error } catch (const std::runtime_error &e) { std::cerr << e.what() << '\n'; }
}
輸出結果
[java] view plaincopy[java] view plaincopy
總結
以上是生活随笔為你收集整理的c++中boost协程5种使用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 协程与网络编程
- 下一篇: C++中的yield和fork