Информация об изменениях

Сообщение Re[11]: Вопрос по корутинам от 28.08.2025 12:04

Изменено 28.08.2025 12:08 kov_serg

Re[11]: Вопрос по корутинам
Здравствуйте, so5team, Вы писали:

S>Да-да-да. Тут вот в параллельном обсуждении тов.kov_serg продемонстрировал как именно это будет выглядеть.

S>Спасибо, не надо. Код из 1980-х лучше бы оставить в 1980-х.
Причем тут год из 80-x просили как это будет выглядеть на C я на C и привёл.

Так основная идея такая:
1. Любая асинхронная функция имеет состояние.
2. Должна уметь обрабатывать внешние сигналы. как минимум для инициализаци (sevInit) и для освобождения ресурсов (sevDone)
3. Причем гарантируется если был вызван sevInit то обязательно будет вызван sevDone.
4. Управление асинхронной функции передаётся явно и она возвращает 0, если закончили или 1 если еще работает.
(расширение: 2-обработать запрос, -n если хоче заснуть на n шагов/ед.времени, кодов прерывания может быть больше например 3-chunk_ready, ...)
(так же и события для sevCancel, sevBegin, sevEnd, ... )

Отсюда общий интерфейс любой асинхронной функции:
struct afn_t {
  void *ctx;
  int (*setup)(void* ctx,int sev);
  int (*loop)(void* ctx);
};
enum { sevInit, sevDone };

Остальное фантики. loop-fn.h — это реализация stackless корутин на plainC. Не наравится можно писать как больше нравится. На общий подход не влияет.

Вот и всё описание асинхронных функций. Этого более чем достаточно, а теперь почитайте что надо для C++20.coroutines
Re[11]: Вопрос по корутинам
Здравствуйте, so5team, Вы писали:

S>Да-да-да. Тут вот в параллельном обсуждении тов.kov_serg продемонстрировал как именно это будет выглядеть.

S>Спасибо, не надо. Код из 1980-х лучше бы оставить в 1980-х.
Причем тут код из 80-x просили как это будет выглядеть на C я на C и привёл.

Так основная идея такая:
1. Любая асинхронная функция имеет состояние.
2. Должна уметь обрабатывать внешние сигналы. как минимум для инициализаци (sevInit) и для освобождения ресурсов (sevDone)
3. Причем гарантируется если был вызван sevInit то обязательно будет вызван sevDone.
4. Управление асинхронной функции передаётся явно и она возвращает 0, если закончили или 1 если еще работает.
(расширение: 2-обработать запрос, -n если хоче заснуть на n шагов/ед.времени, кодов прерывания может быть больше например 3-chunk_ready, ...)
(так же и события для sevCancel, sevBegin, sevEnd, ... )

Отсюда общий интерфейс любой асинхронной функции:
struct afn_t {
  void *ctx;
  int (*setup)(void* ctx,int sev);
  int (*loop)(void* ctx);
};
enum { sevInit, sevDone };

Остальное фантики. loop-fn.h — это реализация stackless корутин на plainC. Не наравится можно писать как больше нравится. На общий подход не влияет.

Вот и всё описание асинхронных функций. Этого более чем достаточно, а теперь почитайте что надо для C++20.coroutines