40.1 基础线程函数

线程可以被创建并等待其结束。线程无法直接退出,但当前线程可隐式退出, 其他线程则可被发送信号。

Function: make-thread function &optional name

创建一个新的执行线程,该线程会调用 function。 当 function 返回时,线程退出。

新线程创建时不带有任何生效的局部变量绑定。 新线程的当前缓冲区继承自当前线程。

可通过 name 为线程指定名称。该名称仅用于调试与信息展示, 对 Emacs 本身无特殊含义。若提供 name,其必须为字符串。

该函数返回新建的线程对象。

Function: threadp object

object 代表一个 Emacs 线程,该函数返回 t, 否则返回 nil

Function: thread-join thread

阻塞当前线程,直到 thread 退出或当前线程收到信号。 函数返回 thread 对应函数的执行结果。 若 thread 已退出,该函数会立即返回。

Function: thread-signal thread error-symbol data

signal(see 如何发出错误信号)类似, 但信号会被投递到 thread 线程中。 若 thread 为当前线程,则直接立即调用 signal。 否则,thread 一旦成为当前执行线程就会收到该信号。 若 thread 正因调用 mutex-lockcondition-waitthread-join 而阻塞,thread-signal 会将其解除阻塞。

thread 为主线程,信号不会在其中传播, 而是以消息形式在主线程中显示。

Function: thread-yield

将执行权让渡给下一个可运行的线程。

Function: thread-name thread

返回 thread 的名称,即创建时传给 make-thread 的名称。

Function: thread-live-p thread

thread 处于活动状态则返回 t,否则返回 nil。 只要线程对应的函数仍在执行,该线程即为活动状态。

Function: thread--blocker thread

返回 thread 正在等待的对象。该函数主要用于调试, 因此使用双连字符名称以示说明。

thread 阻塞于 thread-join,则返回其等待的目标线程。

thread 阻塞于 mutex-lock,则返回对应的互斥锁。

thread 阻塞于 condition-wait,则返回对应的条件变量。

其他情况返回 nil

Function: current-thread

返回当前线程对象。

Function: all-threads

返回所有活动线程对象组成的列表。每次调用均返回新列表。

Variable: main-thread

该变量保存 Emacs 运行所在的主线程;若 Emacs 编译时未启用线程支持, 则为 nil

当线程运行的代码触发未处理的错误时,该线程会退出。 其他线程可通过以下函数获取导致线程退出的错误信息。

Function: thread-last-error &optional cleanup

返回最近一次因错误而退出的线程所记录的错误结构。 每个异常退出的线程都会覆盖上一次保存的错误信息,因此仅能获取最后一次的内容。 若 cleanupnil,则将保存的错误结构重置为 nil