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

How to use Boost.Coroutine in a fashion similar to Unity3D Coroutine in terms of sleep?

本文关键字:Coroutine Unity3D 类似于 方式使 Boost 何使用 方面      更新时间:2023-10-16

如何使用Boost。在X毫秒的睡眠方面,以类似于Unity3D Coroutine的方式使用Coroutine?一般来说,我们希望有一个corutines数组,允许它们使用WaitForSeconds对象的一些替代方法作为yield return来等待下一次执行。Boost中有这样的东西吗。科罗廷还是如何从头开始重新创造效果?

Boost。纤维具有睡眠功能。见下文:

https://github.com/olk/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)
}}

我有一个使用C++11和boost协程2的协程类。
CoroBehavior的用法与MonoPhavior of Unity非常相似,如下所示:

#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