Re[6]: Асинхронщина
От: Videoman Россия https://hts.tv/
Дата: 13.12.25 11:23
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>...


Твой WaitingBlock сейчас везде называется Promise. Это не проблема и есть уже давно. Смотри пара std::promise/std::future. Проблема же не в отложенном ожидании как таковом, а в восстановлении всего контекста ожидания, что бы продолжить бизнес логику дальше, с того же места, где она прервалась на ожидание.

Вот пример:
result class::some_method1(params1_t... params)
{
    Что создаем на стеке (1)
    Что создаем на стеке (2)
    Что создаем на стеке (3)

    wair_for_io_operation (1) 
    wair_for_io_operation (2) 

    Что создаем на стеке (4)
    Что создаем на стеке (5)
    Что создаем на стеке (6)

    wair_for_io_operation (3) 
    wair_for_io_operation (4)

    Очищаем созданное на стеке (1)
    Очищаем созданное на стеке (2)
    Очищаем созданное на стеке (3)
    Очищаем созданное на стеке (4)
    Очищаем созданное на стеке (5)
    Очищаем созданное на стеке (6)
}

result class::some_method2(params2_t... params)
{
    Что создаем на стеке (1)
    Что создаем на стеке (2)
    Что создаем на стеке (3)

    wair_for_io_operation (1) 
    wair_for_io_operation (2) 

    Что создаем на стеке (4)
    Что создаем на стеке (5)
    Что создаем на стеке (6)

    wair_for_io_operation (3) 
    wair_for_io_operation (4)

    Очищаем созданное на стеке (1)
    Очищаем созданное на стеке (2)
    Очищаем созданное на стеке (3)
    Очищаем созданное на стеке (4)
    Очищаем созданное на стеке (5)
    Очищаем созданное на стеке (6)
}
Нужно иметь возможность выполнять эти два метода параллельно, в зависимости от того, как завершаются операции ввода-вывода. В С++20 корутины между вызовами сохраняют объекты выделенные на стеке в куче и после ожидания заново копируют на стек в том же состоянии, для продолжения выполнения с прерванной точки. Как такое можно сделать на С++17 по твоему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.