uvco 0.1
Loading...
Searching...
No Matches
run.h
Go to the documentation of this file.
1// uvco (c) 2025 Lewin Bormann. See LICENSE for specific terms.
2
3#pragma once
4
5#include "uvco/loop/loop.h"
9
10namespace uvco {
11
14
15class Loop;
16
18Promise<void> yield();
19
21MultiPromise<unsigned> yield(unsigned count);
22
23// Forward declaration only for friend declaration.
24template <typename F, typename R>
25concept MainFunction = std::is_invocable_r_v<Promise<R>, F, const Loop &>;
26
27template <typename R, MainFunction<R> F>
29
50template <typename R, MainFunction<R> F>
51R runMain(F main, Scheduler::RunMode mode) {
52 Loop loop{mode};
53 Promise<R> promise = main(loop);
54 runLoop(loop);
55 return promise.unwrap();
56}
57
59
60} // namespace uvco
Definition loop.h:26
Definition promise.h:76
T unwrap()
Definition promise.h:139
Definition run.h:25
R runMain(F main, Scheduler::RunMode mode=Scheduler::RunMode::Deferred)
Definition run.h:51
Promise< void > yield()
Suspend current coroutine until next event loop iteration.
Definition run.cc:24
RunMode
Definition scheduler.h:45
Definition async_work.cc:17
void runLoop(Loop &loop)
Definition run.cc:32