如何在睡眠方面以类似于Unity3D Coroutine的方式使用Boost.Coroutine?

时间:2015-04-06 04:25:20

标签: c++ boost coroutine

如何在休眠方面以类似于Boost.Coroutine的方式使用Unity3D Coroutine X毫秒?通常我们希望有一个corutines数组允许他们使用WaitForSeconds对象的替代作为yield return来及时进行下一次执行。在Boost.Coroutine中有这样的事情是否有任何悬念或如何从头开始重建效果?

2 个答案:

答案 0 :(得分:1)

Boost.Fiber具有睡眠功能。见如下:

https://github.com/olk/boost-fiber

Boost.Fiber是Boost.Coroutine的包装器,用于线程接口。

// <boost/fiber/operations.hpp>
namespace boost {
namespace this_fiber {
void sleep_until( fibers::clock_type::time_point const& sleep_time);

template< typename Rep, typename Period >
void sleep_for( chrono::duration< Rep, Period > const& timeout_duration)
}}

答案 1 :(得分:0)

我有使用C ++ 11和boost coroutine2的协程类 CoroBehaviour的使用与Unity的MonoBehaviour非常相似,如下所示:

#include "CoroBehaviour.h"
#include <iostream>

class ExampleClass : public CoroBehaviour
{
    void Start()
    {
        StartCoroutine(coroutineA());
    }

    Enumerator coroutineA()
    {
        return [=](CoroPush& yield_return)
        {
            // wait for 1 second
            std::cout << "coroutineA created";
            yield_return(new WaitForSeconds(1.0f));
            yield_return(StartCoroutine(coroutineB()));
            std::cout << "coroutineA running again";
        };
    }

    Enumerator coroutineB()
    {
        return [=](CoroPush& yield_return)
        {
            std::cout << "coroutineB created";
            yield_return(new WaitForSeconds(2.5f));
            std::cout << "coroutineB enables coroutineA to run";
        };
    }
}

您可以从此处获取代码:https://github.com/exawon/CoroBehaviour