Spec-Zone.ru › Nim

std/coro

Source Edit

Реализация сопроцедур Nim, поддерживает несколько методов переключения контекста:

ucontext доступно в unix и подобных системах (по умолчанию)
setjmp доступно в unix и подобных системах (только x86/64)
fibers доступно и необходимо в Windows.
-d:nimCoroutines
Требуется для сборки этого модуля.
-d:nimCoroutinesUcontext
Использовать бэкэнд ucontext.
-d:nimCoroutinesSetjmp
Использовать бэкэнд setjmp.
-d:nimCoroutinesSetjmpBundled
Использовать встроенную реализацию setjmp.

Нестабильный API.

Поддержка таймеров для реального времени GC. Основано на https://github.com/jckarter/clay/blob/master/compiler/hirestimer.cpp

Импорты

coro_detection, os, списки, winlean

Типы

CoroutineRef = ref object
CoroutineRef содержит указатель на фактический объект сопроцедуры. Открытый API всегда возвращает CoroutineRef вместо CoroutinePtr для возможности удерживать ссылку на объект сопроцедуры, пока он может быть безопасно удален циклом планировщика сопроцедур. В этом случае Coroutine.reference.coro устанавливается в nil. Открытый API проверяет его на nil и корректно завершает работу, если он nil. Source Edit

Процедуры

proc alive(c: CoroutineRef): bool {....raises: [], tags: [], forbids: [].}
Возвращает true если сопроцедура еще не вернула значение, false в противном случае. Source Edit
proc nimGC_setStackBottom(theStackBottom: pointer) {....raises: [], tags: [],
    forbids: [].}
Source Edit
proc run() {....raises: [], tags: [TimeEffect], forbids: [].}
Запускает основной цикл планировщика сопроцедур, который завершается, когда все сопроцедуры завершаются. Вызов этой процедуры запускает выполнение первой сопроцедуры. Source Edit
proc start(c: proc (); stacksize: int = defaultStackSize): CoroutineRef {.
    discardable, ...raises: [], tags: [], forbids: [].}
Планирует сопроцедуру для выполнения. Она не выполняется немедленно. Source Edit
proc suspend(sleepTime: float = 0.0) {....raises: [], tags: [], forbids: [].}
Останавливает выполнение сопроцедуры и возобновляет не ранее, чем через sleeptime секунды. До этого момента выполняются другие сопроцедуры. Source Edit
proc wait(c: CoroutineRef; interval = 0.01) {....raises: [], tags: [], forbids: [].}
Возвращает только после того, как сопроцедура c вернулась. interval — время в секундах, с какой частотой. Source Edit

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/coro.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API