我正在使用 PostgreSQL 8.3,并编写一个使用 libpq API 的 C++ 程序。我使用 PQsendQuery() 函数异步执行命令。我正试图实现一个超时处理特性。当超时到期时,我通过调用 PQcancel() 来实现它。我使用一个返回 100,000 行的查询进行测试(持续约 0.5 秒),并设置了 1 毫秒的超时时间,发现与其取消命令,PQcancel() 阻塞直到服务器完成执行,然后以成功的查询返回。
我知道文档中说即使有成功的取消请求,查询仍可能被执行。我的问题在于,PQcancel() 阻塞了我的执行线程,这是不可接受的,因为我使用异步处理(使用 Boost Asio 框架),所以我的程序可能还有其他任务要执行,而不仅仅是执行 SQL 查询,只能运行在一个线程上。
PQcancel() 阻塞是正常的吗?有没有办法进行非阻塞式的取消请求?
我知道文档中说即使有成功的取消请求,查询仍可能被执行。我的问题在于,PQcancel() 阻塞了我的执行线程,这是不可接受的,因为我使用异步处理(使用 Boost Asio 框架),所以我的程序可能还有其他任务要执行,而不仅仅是执行 SQL 查询,只能运行在一个线程上。
PQcancel() 阻塞是正常的吗?有没有办法进行非阻塞式的取消请求?
PQcancel()
的功能不同,才会对当前产生影响。 - petersohn