Исходник Stackful coroutines

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
Описание: Stackful короутина - подпрограмма которая имеет свой контекст выполнения и может быть приостановлена из любой вложенной функции. "Библиотека" позволяет программно переключать контекст выполнения. Проще говоря, вы можете прервать выполнение своей функции в любой момент и перейти к выполнению другой. Это очень полезно, когда нужно избежать ожидания.
Пример:
v1​
v2​
C++:
coroutine outer([](coroutine& inner)
{
    printf("1");
    inner.yield(); // приостанавливаем функцию
    printf("3");
});

outer.resume(); // запускаем функцию
printf("2");
outer.resume(); // переходим обратно к функции
printf("4");
C++:
std::string text{ "" };
coroutine<std::string, std::string&> outer(
[](auto& inner, std::string& input) {
    for (int i = 0; i < 5; ++i) {
        // Imagine is a big operation here
        input += std::to_string(i);
        inner.yield();
    }
    return input;
}, text);

while (!outer.is_finished()) {
    outer.resume();
    text += '\n';
}

printf("Text:\n%s\n", text.c_str());
printf("Result:\n%s\n", outer.get_result().c_str());

system("pause");

Появилось:
  • Теперь single-header library​
  • Аргументы в функторах с поддержкой ссылок​
  • is_finished - завершена ли короутина​
  • get_result - результат выполнения короутины​
 

Вложения

  • coroutine_v2.zip
    708 байт · Просмотры: 10
  • coroutine_v1.zip
    729 байт · Просмотры: 3
Последнее редактирование: