Spec-Zone.ru › Nim 1

coro

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

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

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

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

Импорты

os, списки

Типы

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

Процедуры

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

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

Spec-Zone.ru

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