Сообщение Re[11]: Вопрос по корутинам от 28.08.2025 12:04
Изменено 28.08.2025 12:04 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, ... )
Отсюда общий интерфейс любой асинхронной функции:
Остальное фантики. loop-fn.h — это реализация stackless корутин на plainC. Не наравится можно писать как больше нравится. На общий подход не влияет.
Вот и всё описание асинхронных функций. Этого более чем достаточно, а теперь почитайте что надо для C++20.coroutines
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, ... )
Отсюда общий интерфейс любой асинхронной функции:
Остальное фантики. loop-fn.h — это реализация stackless корутин на plainC. Не наравится можно писать как больше нравится. На общий подход не влияет.
Вот и всё описание асинхронных функций. Этого более чем достаточно, а теперь почитайте что надо для C++20.coroutines
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
