# 34.7.取消正在进行的查询
客户端应用程序可以使用本节介绍的功能,请求取消服务器仍在处理的命令。
创建一个数据结构,其中包含取消通过特定数据库连接发出的命令所需的信息。
PGcancel *PQgetCancel(PGconn *conn);
PQgetCancel
创造一个取消
给定的对象PGconn
连接对象。它会回来的无效的
如果*康涅狄格州
*是无效的
或者是无效的连接。这个取消
对象是一个不透明的结构,应用程序不能直接访问它;它只能传递给取消
或PQfreeCancel
.
释放由创建的数据结构PQgetCancel
.
void PQfreeCancel(PGcancel *cancel);
PQfree取消
释放先前创建的数据对象PQgetCancel
.
请求服务器放弃当前命令的处理。
int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);
如果取消请求成功发送,则返回值为 1,否则返回 0.如果不,错误的
充满了解释性错误消息。错误的
必须是大小为 char 的数组错误大小
(推荐大小为 256 字节)。
但是,成功发送并不能保证请求会产生任何效果。如果取消有效,当前命令将提前终止并返回错误结果。如果取消失败(例如,因为服务器已经完成了命令的处理),那么根本不会有可见的结果。
取消
可以安全地从信号处理程序调用,如果*错误的
*是信号处理程序中的局部变量。这PG取消
对象是只读的取消
是有关的,因此它也可以从与操作线程分开的线程中调用PGconn
目的。
PQrequest取消
是不推荐使用的变体取消
.
int PQrequestCancel(PGconn *conn);
请求服务器放弃当前命令的处理。它直接在PGconn
对象,并在失败的情况下将错误消息存储在PGconn
对象(可以通过以下方式检索它)PQerrorMessage
)。尽管功能相同,但这种方法会为多线程程序和信号处理程序带来危险,因为可能会覆盖PGconn
的错误消息将弄乱当前正在进行的连接操作。