【发布时间】:2015-09-04 07:38:31
【问题描述】:
我正在开发一个c++ 测量软件,它使用a 3rd party API 作为所有传感器连接的接口。此 API 不是开源的,也没有可用的调试库。
在某些情况下,当开始从接口读取值时,软件会冻结。虽然我无法确定是什么标准导致了问题以及为什么到目前为止它只发生有时,但我想拦截冻结并实施一些错误处理,这也可以让我更好地调试问题。
在我的代码中,我只是有一个电话
BOOL result = false;
result = pciadioAIStartConversion(board_index, channel_nr, range);
如果发生错误,pciadioAIStartConversion 永远不会返回。我正在寻找一些简单的功能来保持软件运行并在调用时间过长时返回。
我正在使用 Qt 框架 (4.8.6),因此可能的解决方案是使用事件系统和 QTimer,但因此如果我没记错的话,调用将需要它自己的线程,这似乎对我来说有点矫枉过正。
【问题讨论】:
-
我认为除了产生一个单独的线程之外没有任何方法可以实现超时。
-
您可以创建一个单独的
QProcess,它会从 3rdparty 库进行调用,并使用QLocalSocket或std::cin / std::cout进行通信。如果您没有得到响应,您可以安全地终止进程。它比终止线程更安全。 -
如果您的外部软件组件冻结,它可能仍然持有资源,即使它会被杀死。也许外部设备处于未定义状态,简单地重新启动线程将无济于事。根据我的经验,依赖损坏的库并不是一个好主意。重新启动软件的解决方法听起来很糟糕。