12 Nisan 2016 Salı

boost coroutine

Giriş
Ne olduğunu tam anlamadım. İleride daha detaylı yazarım. Şöyle yaparız.
typedef boost::coroutines::coroutine<void>::push_type coroutine;
typedef boost::coroutines::coroutine<void>::pull_type yield_context;
typedef std::vector<coroutine> coroutine_list;

bool run_once_all(coroutine_list& coros)
{
    bool pending = false;
    for (auto& coro : coros)
    {
        if (coro)
        {
            coro();
            pending = pending || !coro.empty();
        }
    }
    return pending;
}

void run_all(coroutine_list& coros,
             const boost::chrono::nanoseconds& idle_ns)
{
    while (run_once_all(coros))
    {
        boost::this_thread::sleep_for(idle_ns);
    }
}

void run_all(coroutine_list& coros, yield_context& yield)
{
    while (run_once_all(coros))
    {
        yield();
    }
}



Hiç yorum yok:

Yorum Gönder