coro
Nim coroutines implementation, supports several context switching methods:
ucontext | available on unix and alike (default) |
setjmp | available on unix and alike (x86/64 only) |
fibers | available and required on windows. |
-d:nimCoroutines | Required to build this module. |
---|---|
-d:nimCoroutinesUcontext | Use ucontext backend. |
-d:nimCoroutinesSetjmp | Use setjmp backend. |
-d:nimCoroutinesSetjmpBundled | Use bundled setjmp implementation. |
Unstable API.
Timer support for the realtime GC. Based on https://github.com/jckarter/clay/blob/master/compiler/hirestimer.cppImports
Types
CoroutineRef = ref object coro: CoroutinePtr
- CoroutineRef holds a pointer to actual coroutine object. Public API always returns CoroutineRef instead of CoroutinePtr in order to allow holding a reference to coroutine object while it can be safely deallocated by coroutine scheduler loop. In this case Coroutine.reference.coro is set to nil. Public API checks for it being nil and gracefully fails if it is nil. Source Edit
Procs
proc suspend(sleepTime: float = 0) {...}{.raises: [], tags: [].}
- Stops coroutine execution and resumes no sooner than after
sleeptime
seconds. Until then other coroutines are executed. Source Edit proc start(c: proc (); stacksize: int = defaultStackSize): CoroutineRef {...}{. discardable, raises: [], tags: [RootEffect].}
- Schedule coroutine for execution. It does not run immediately. Source Edit
proc run() {...}{.raises: [], tags: [TimeEffect].}
- Source Edit
proc alive(c: CoroutineRef): bool {...}{.raises: [], tags: [].}
- Returns
true
if coroutine has not returned,false
otherwise. Source Edit proc wait(c: CoroutineRef; interval = 0.01) {...}{.raises: [], tags: [].}
- Returns only after coroutine
c
has returned.interval
is time in seconds how often. Source Edit
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/coro.html