首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Qt中的错误恢复

从Qt中的错误恢复
EN

Stack Overflow用户
提问于 2017-07-03 18:36:54
回答 1查看 66关注 0票数 2

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 22:54:38

你的问题在细节上有点低,但我假设你正在使用QThread并在其中嵌入QEventLoop

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

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

然后,您可以检查来自exec()的返回码,并执行相应的操作。

代码语言:javascript
复制
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;
};

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

代码语言:javascript
复制
try
{
    // ...
}
catch(const CalculationError& e)
{
    _analysis_thread.exit();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44883469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档