从 Qt 中的错误中恢复

Recovering from error in Qt

我正在实现一个使用 3 个线程的系统(一个是 GUI,一个是用于数据采集的 TCP 客户端和一个用于计算的分析线程)。 我很难处理其中任何一个的异常。我现在要解决的情况是如果某些计算出错会发生什么,我需要 'freeze' 系统。问题是在某些情况下,我有数据在分析线程的事件循环中等待。我怎样才能安全地清除这个队列,而不处理所有事件(正如我所说,出了点问题所以我不想再做任何计算)。 有没有办法清除特定线程的事件循环?什么时候可以安全删除对象?

谢谢

你的问题不够详细,但我假设你正在使用 QThread 并在其中嵌入 QEventLoop

可以调用QEventLoop::exit(-1),是线程安全的。

传递给 exit 的值是退出状态,并且将是从 QEventLoop::exec() 编辑的值 return。我选择了 -1,它通常用于表示错误情况。

然后您可以检查 exec() 中的 return 代码,并采取相应的行动。

class AnalysisThread : public QThread
{
    Q_OBJECT
public:
    void run() override
    {
        int res = _loop.exec();
        if (res == -1)
        {
            // delete objects
        }
    }

    void exit()
    {
        _loop.exit(-1);
    }
private:
    QEventLoop _loop;
};

在其他地方,在您的异常处理程序中

try
{
    // ...
}
catch(const CalculationError& e)
{
    _analysis_thread.exit();
}