std/selectors
Исходный кодИзменитьЭтот модуль позволяет выполнять высокоуровневое и эффективное мультиплексирование ввода-вывода.
Поддерживаемые примитивы ОС: epoll, kqueue, poll и Windows select.
Для использования потокобезопасной версии этого модуля, необходимо скомпилировать его с опциями -d:threadsafe и --threads:on.
Поддерживаемые функции: файлы, сокеты, каналы, таймеры, процессы, сигналы и пользовательские события.
Полностью поддерживаемые ОС: MacOSX, FreeBSD, OpenBSD, NetBSD, Linux (кроме Android).
Частично поддерживаемые ОС: Windows (только сокеты и пользовательские события), Solaris (файлы, сокеты, дескрипторы и пользовательские события). Android (файлы, сокеты, дескрипторы и пользовательские события).
TODO: /dev/poll, event ports и события файловой системы.
Импорты
- nativesockets, oserrors
Типы
Event {.pure.} = enum Read, ## Descriptor is available for read Write, ## Descriptor is available for write Timer, ## Timer descriptor is completed Signal, ## Signal is raised Process, ## Process is finished Vnode, ## BSD specific file change User, ## User event is raised Error, ## Error occurred while waiting for descriptor VnodeWrite, ## NOTE_WRITE (BSD specific, write to file occurred) VnodeDelete, ## NOTE_DELETE (BSD specific, unlink of file occurred) VnodeExtend, ## NOTE_EXTEND (BSD specific, file extended) VnodeAttrib, ## NOTE_ATTRIB (BSD specific, file attributes changed) VnodeLink, ## NOTE_LINK (BSD specific, file link count changed) VnodeRename, ## NOTE_RENAME (BSD specific, file renamed) VnodeRevoke ## NOTE_REVOKE (BSD specific, file revoke occurred)- Перечисление типов событий Исходный код Изменить
IOSelectorsException = object of CatchableError
- Исключение, которое генерируется при возникновении ошибки IOSelectors. Исходный код Изменить
ReadyKey = object fd*: int ## file/socket descriptor events*: set[Event] ## set of events errorCode*: OSErrorCode ## additional error code information for ## Error events- Объект, содержащий результат для дескриптора Исходный код Изменить
SelectEvent = object
- Объект, содержащий пользовательское событие Исходный код Изменить
Selector[T] = ref object
- Объект, содержащий дескрипторы для проверки состояния чтения/записи Исходный код Изменить
Константы
ioselSupportedPlatform = false
- Эта константа используется для определения, поддерживает ли целевая платформа модуль
ioselectorsполностью. Исходный код Изменить
Процедуры
proc registerProcess[T](s: Selector[T]; pid: int; data: T): int {.discardable.}-
Регистрирует уведомление об идентификаторе процесса (pid) (когда процесс завершился) в селекторе
s.data- это определяемые приложением данные, которые будут переданы, когда процесс сpidзавершится.Возвращает файловый дескриптор для зарегистрированного сигнала.
Source Edit proc registerSignal[T](s: Selector[T]; signal: int; data: T): int {.discardable.}-
Регистрирует уведомление о сигнале Unix с
signalв селектореs.data- это определяемые приложением данные, которые будут переданы при возникновении сигнала.Возвращает файловый дескриптор для зарегистрированного сигнала.
Примечание: Эта функция не поддерживается на
Source EditWindows. proc registerTimer[T](s: Selector[T]; timeout: int; oneshot: bool; data: T): int {. discardable.}-
Регистрирует уведомление таймера с
timeout(в миллисекундах) в селектореs.Если
oneshotравноtrue, таймер будет уведомлён только один раз.Установите
oneshotвfalse, если вам нужны периодические уведомления.data- это определяемые приложением данные, которые будут переданы при срабатывании таймера.Возвращает файловый дескриптор для зарегистрированного таймера.
Source Edit proc registerVnode[T](s: Selector[T]; fd: cint; events: set[Event]; data: T)
-
Регистрирует специфичные для BSD/MacOSX события vnode селектора для файлового дескриптора
fdи событийevents.dataопределяемые приложением данные, которые будут переданы, когда произойдет событие vnode.Примечание: Эта функция поддерживается только BSD и MacOSX.
Source Edit proc select[T](s: Selector[T]; timeout: int): seq[ReadyKey]
-
Ожидает событий, зарегистрированных в селекторе
s.Аргумент
timeoutзадаёт максимальное количество миллисекунд, в течение которых функция будет заблокирована, если события не готовы. Указание времени ожидания-1приводит к неограниченному блокированию функции.Возвращает список сработавших событий.
Source Edit proc selectInto[T](s: Selector[T]; timeout: int; results: var openArray[ReadyKey]): int-
Ожидает событий, зарегистрированных в селекторе
s.Аргумент
timeoutзадаёт максимальное количество миллисекунд, в течение которых функция будет заблокирована, если события не готовы. Указание времени ожидания-1приводит к неограниченному блокированию функции. Все доступные события будут сохранены в массивеresults.Возвращает количество сработавших событий.
Source Edit
Шаблоны
template isEmpty[T](s: Selector[T]): bool
- Возвращает
true, если в селекторе нет зарегистрированных событий или дескрипторов. Исходный код Изменить template withData[T](s: Selector[T]; fd: SocketHandle | int; value, body1, body2: untyped)-
Получает данные приложения, назначенные дескриптором
fdкvalue. Этоvalueможет быть изменено в рамках вызоваwithData.s.withData(fd, value) do: # block is executed only if `fd` registered in selector `s`. value.uid = 1000 do: # block is executed if `fd` not registered in selector `s`. raise
Исходный код Изменить template withData[T](s: Selector[T]; fd: SocketHandle | int; value, body: untyped)-
Получает данные приложения, назначенные дескриптором
fdкvalue. Этоvalueможет быть изменено в рамках вызоваwithData.s.withData(fd, value) do: # block is executed only if `fd` registered in selector `s` value.uid = 1000
Исходный код Изменить
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/selectors.html