Основные функции потоков
Потоки можно создавать и ожидать их завершения. Поток нельзя завершить напрямую, но текущий поток можно завершить неявно, а другим потокам можно посылать сигналы.
- Функция: 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