Вопрос. Чтобы решить проблему с медленным my_reduce, вы предлагаете добавить локальную переменную в цикл for (время 1:12:43). Но ведь локальная переменная будет удалена после каждой итерации for. Разве можно отдавать ссылку на нее в std:thread?
У меня вопрос по 51 первому слайду лекции, а точнее, я не понимаю как co_await std::future себя ведет после вызова. Как именно std::future реализует интерфейс awaitable? Как и когда он передает управление обратно в compute
Я хотел бы ответить на этот вопрос со ссылкой на стандарт, но увы, в C++20 это, похоже, не регламентировано и речь о частной инициативе MS. В итоге в том же кланге этот пример скажет, что нет coroutine_traits для future. MS: godbolt.org/z/8VVdRH clang: godbolt.org/z/towgez Впрочем доопределить эти traits можно и самостоятельно. Основная идея реализации awaitable для MS вероятно изложена здесь: kirkshoop.github.io/async/rxcpp/await/c++/2015/03/13/await-in-c++-await-the-future.html Обратите внимание, сделать future валидным типом для корутины это идея Нишанова начиная с 2015-го и я был уверен, что в стандарт это протащили. Ну значит протащат =)
Константин, ещё раз огромное спасибо за лекции. На слайде 41 (9:30) я пологаю должно быть co_return f вместо co_return f.get()
Можно хитрее подождать:
#include
#include
auto operator co_await(std::chrono::system_clock::duration duration){
class awaiter {
static void CALLBACK TimerCallback(PTP_CALLBACK_INSTANCE, void* Context, PTP_TIMER) {
std::experimental::coroutine_handle::from_address(Context)();
}
PTP_TIMER timer = nullptr;
std::chrono::system_clock::duration duration;
public:
explicit awaiter(std::chrono::system_clock::duration duration) : duration(duration) { }
~awaiter() { if (timer) CloseThreadpoolTimer(timer); }
bool await_ready() const { return duration.count()
Вопрос. Чтобы решить проблему с медленным my_reduce, вы предлагаете добавить локальную переменную в цикл for (время 1:12:43). Но ведь локальная переменная будет удалена после каждой итерации for. Разве можно отдавать ссылку на нее в std:thread?
У меня вопрос по 51 первому слайду лекции, а точнее, я не понимаю как co_await std::future себя ведет после вызова. Как именно std::future реализует интерфейс awaitable? Как и когда он передает управление обратно в compute
Я хотел бы ответить на этот вопрос со ссылкой на стандарт, но увы, в C++20 это, похоже, не регламентировано и речь о частной инициативе MS. В итоге в том же кланге этот пример скажет, что нет coroutine_traits для future.
MS: godbolt.org/z/8VVdRH
clang: godbolt.org/z/towgez
Впрочем доопределить эти traits можно и самостоятельно.
Основная идея реализации awaitable для MS вероятно изложена здесь: kirkshoop.github.io/async/rxcpp/await/c++/2015/03/13/await-in-c++-await-the-future.html
Обратите внимание, сделать future валидным типом для корутины это идея Нишанова начиная с 2015-го и я был уверен, что в стандарт это протащили.
Ну значит протащат =)
@@tilir Большое спасибо за пояснение! Пока жду релиз стандарта попробую написать обертку над future (на кланге) чтобы заработал пример с MS)
@@coudam так есть же несколько. Например task в cppcoro и т.п.