应用程序冻结在第三方库调用中

时间:2015-09-04 07:38:32

标签: c++ qt

我正在使用c++测量软件,该软件使用a 3rd party API作为所有传感器所连接的接口。此API不是开源的,也没有可用的调试库。

在某些情况下,软件在开始从界面读取值时会冻结。虽然我无法确定导致问题的标准是什么以及为什么它有时只发生到目前为止,我想拦截冻结并实施一些错误处理,这也可以让我更好地调试问题。

在我的代码中,我只是打电话

BOOL result = false;
result = pciadioAIStartConversion(board_index, channel_nr, range);

其中,如果发生错误,pciadioAIStartConversion永远不会返回。我正在寻找一些简单的功能来保持软件运行,如果调用时间很长,则返回。

我正在使用Qt框架(4.8.6),因此可能的解决方案是使用事件系统和QTimer,但是如果我不是,那么调用将需要自己的线程错了,这似乎对我来说太过分了。

1 个答案:

答案 0 :(得分:1)

piezol是对的你需要一个单独的线程,这可能会非常混乱,但好消息是Qt线程框架(称为QtConcurrent)真的很有帮助。

这是一个在单独的线程中运行标准函数的示例,该函数控制它。

#include <QDebug>
#include <QThread>
#include <QString>
#include <qtconcurrentrun.h>
#include <QApplication>

using namespace QtConcurrent;

void hello(QString name)
{
    qDebug() << "Hello" << name << "from" << QThread::currentThread();
}

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QFuture<void> f1 = run(hello, QString("Alice"));
    QFuture<void> f2 = run(hello, QString("Bob"));
    f1.waitForFinished();       
    f2.waitForFinished();     
}