客户端应用程序可以使用本节中描述的函数请求取消服务器仍在处理的命令。
PQgetCancel
创建一个包含取消通过特定数据库连接发出的命令所需信息的数据结构。
PGcancel *PQgetCancel(PGconn *conn);
PQgetCancel
创建一个PGcancel
对象,给定一个PGconn
连接对象。
如果给定的conn
是NULL
或无效连接,则返回NULL
。
PGcancel
对象是一个不透明结构,不应直接被应用程序访问;它只能传递给PQcancel
或PQfreeCancel
。
PQfreeCancel
释放由PQgetCancel
创建的数据结构。
void PQfreeCancel(PGcancel *cancel);
PQfreeCancel
释放先前由PQgetCancel
创建的数据对象。
PQcancel
请求服务器放弃当前命令的处理。
int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);
返回值为1表示取消请求成功发送,为0表示未成功发送。如果未成功发送,errbuf
将填充一个解释性错误消息。
errbuf
必须是大小为errbufsize
的char数组(建议大小为256字节)。
成功的调度并不保证请求会产生任何效果。然而,如果取消操作成功,当前命令将提前终止并返回错误结果。 如果取消操作失败(比如,因为服务器已经完成了命令的处理),那么将不会有任何可见的结果。
PQcancel
可以安全地从信号处理程序中调用,如果errbuf
是信号处理程序中的局部变量。
就PQcancel
而言,PGcancel
对象是只读的,因此它也可以从与操作PGconn
对象的线程分离的线程中调用。
PQrequestCancel
PQrequestCancel
是 PQcancel
的一个已弃用的变体。
int PQrequestCancel(PGconn *conn);
请求服务器放弃当前命令的处理。它直接作用于PGconn
对象,
失败时将错误消息存储在PGconn
对象中(可以通过PQerrorMessage
检索)。
尽管功能相同,但这种方法在多线程程序或信号处理程序中不安全,因为可能会覆盖PGconn
的错误消息,
从而破坏当前连接上正在进行的操作。