死锁时SQLExecDirect不会返回

时间:2017-12-13 19:09:18

标签: c++ odbc

我有一个C ++应用程序通过SQLExecDirect调用存储过程。如果存在死锁,则SQLExecDirect不会返回,直到死锁被解决。

我已经在.net世界中读到它可以检测到死锁并抛出异常。有什么办法让C ++ / ODBC在死锁时重新获得控制权?我怀疑答案是否定的,但我希望有一些我尚未找到的ODBC功能。

我能想到的唯一解决方法是启动另一个线程来运行它并设置线程返回的超时。

不,我无法解决僵局。此应用程序正在运行我们选择的客户数据库中的查询或存储过程。我只是不希望它在僵局的持续时间内没有反应。

1 个答案:

答案 0 :(得分:1)

如果您的ODBC提供程序支持异步执行,您可以通过这种方式执行操作,ODBC 3.8+甚至支持基于事件的通知模式,而不是旧版3.0轮询。请注意,除非使用类似SQLServer的MARS,否则您的连接仍然会死锁,它只允许线程在等待答案时执行其他操作。