41.13 事务队列

你可以使用 事务队列(transaction queue) 与子进程通过事务进行通信。首先使用 tq-create 创建一个与指定进程通信的事务队列。之后可以调用 tq-enqueue 发送事务。

Function: tq-create process

该函数创建并返回一个与 process 通信的事务队列。参数 process 应当是一个能够收发字节流的子进程。它可以是子进程,也可以是与另一台机器上服务器的 TCP 连接。

Function: tq-enqueue queue question regexp closure fn &optional delay-question

该函数向队列 queue 发送事务。指定队列即指定了要通信的子进程。

参数 question 是启动事务的 outgoing 消息。参数 fn 是收到对应回复时要调用的函数;它会接收两个参数:closure 与收到的回复内容。

参数 regexp 是一个正则表达式,应当匹配整个回复的末尾文本,而不匹配前面内容;tq-enqueue 以此判断回复的结束位置。

若参数 delay-questionnil,则延迟发送该问题,直到进程完成对之前所有问题的回复。这在部分进程中可获得更可靠的结果。

Function: tq-close queue

关闭事务队列 queue,等待所有待处理事务完成,随后终止连接或子进程。

事务队列通过过滤器函数实现。See 进程过滤器函数