Spec-Zone.ru › Elisp

Основные функции потоков

Потоки можно создавать и ожидать их завершения. Поток нельзя завершить напрямую, но текущий поток можно завершить неявно, а другим потокам можно посылать сигналы.

Функция: make-thread function &optional name buffer-disposition

Создать новый поток выполнения, вызывающий function. Когда function возвращает значение, поток завершается.

Новый поток создаётся без действующих привязок локальных переменных. Текущий буфер нового потока наследуется от текущего потока.

Для потока можно указать имя name. Имя используется только для отладки и информационных целей; для Emacs оно не имеет значения. Если указано name, оно должно быть строкой.

buffer-disposition определяет, что произойдёт, если текущий буфер потока собираются уничтожить. Если значение равно t, уничтожение буфера запрещено. Любое другое значение, включая nil (используемое по умолчанию), означает, что буфер уничтожается, потоку назначается другой текущий буфер, а ему посылается сигнал ошибки thread-buffer-killed. Однако, если значение — символ silently, сигнал ошибки не посылается.

Функция возвращает новый поток.

После создания потока его режим обработки буфера можно проверить или изменить с помощью функций thread-buffer-disposition и thread-set-buffer-disposition.

Функция: threadp object

Эта функция возвращает t, если object представляет поток Emacs, и nil в противном случае.

Функция: thread-join thread

Блокировать выполнение, пока thread не завершится или пока текущему потоку не будет послан сигнал. Функция возвращает результат функции потока thread. Если thread уже завершился, функция возвращает результат немедленно.

Функция: thread-signal thread error-symbol data

Подобно signal (см. Как послать сигнал ошибки), но сигнал доставляется потоку thread. Если thread — текущий поток, функция просто немедленно вызывает signal. В противном случае thread получит сигнал, как только станет текущим. Если thread был заблокирован вызовом mutex-lock, condition-wait или thread-join, вызов thread-signal разблокирует его.

Если thread — главный поток, сигнал ему не передаётся. Вместо этого в главном потоке отображается сообщение.

Функция: thread-yield

Передать выполнение следующему готовому к запуску потоку.

Функция: thread-name thread

Вернуть имя thread, указанное при вызове make-thread.

Функция: thread-live-p thread

Вернуть t, если thread активен, или nil, если нет. Поток остаётся активным, пока выполняется его функция.

Функция: thread--blocker thread

Вернуть объект, которого ожидает thread. Эта функция предназначена главным образом для отладки, что отражено в её имени с «двойным дефисом».

Если thread заблокирован в thread-join, функция возвращает поток, которого он ожидает.

Если thread заблокирован в mutex-lock, функция возвращает мьютекс.

Если thread заблокирован в condition-wait, функция возвращает условную переменную.

В противном случае функция возвращает nil.

Функция: current-thread

Вернуть текущий поток.

Функция: all-threads

Вернуть список всех активных объектов-потоков. При каждом вызове возвращается новый список.

Переменная: main-thread

В этой переменной хранится главный поток, в котором работает Emacs, либо nil, если Emacs собран без поддержки потоков.

Если код, выполняемый потоком, посылает необработанный сигнал ошибки, поток завершается. Другие потоки могут получить форму ошибки, из-за которой завершился поток, с помощью следующей функции.

Функция: thread-last-error &optional cleanup

Эта функция возвращает последнюю форму ошибки, сохранённую при завершении потока из-за ошибки. Каждый поток, завершившийся аварийно, заменяет форму, сохранённую после ошибки предыдущего потока, новым значением, поэтому доступна только последняя форма. Если cleanup не равно nil, сохранённая форма сбрасывается в nil.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Basic-Thread-Functions.html

Spec-Zone.ru

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