boost 1.53 的 boost.coroutine协程库

boost库总是会给人带来惊喜,换了1.53好久,一直没去看更新内容,今天用到原子操作了,一看Boost里面有,good!

再看有一个boost.coroutine,哈,爽!查了下用法,看来入库后比原版简化了不少,应该算是对称协程,boost特点,用起来特别简单

#include <boost/coroutine/coroutine.hpp>

#include <string>

int main(int argc, char* argv[])

{

  // 类型声明类似boost.function不过这里不是函数原型,而算是调用与返回的通讯协议

    typedef boost::coroutines::coroutine<std::string(std::string)>  myCoro_t;



  // 函数体的原型是被固定为void(T::caller_type&)类型的和作者原版不太一样

    myCoro_t coro([](myCoro_t::caller_type& caller){        

            while(caller.has_result())

            {

                if (caller.get()=="exit")

                    return;

                std::cout << caller.get() << std::endl;

                caller("ok");

            }

        },"this your arg");  // 初始化可以不传入参数,但是调用get前需要判断has_result否则触发断言

  if (coro.has_result())

        std::cout << coro.get() << std::endl;

    

    coro("give you the arg again");

    if (coro.has_result())

        std::cout << coro.get() << std::endl;



    coro("exit");

    if (!coro)  // 执行完毕或者被设置空后为false

       std::cout << "the coroutine is complete" << std::endl;



    return 0;

}

你可能感兴趣的:(coroutine)