我是靠谱客的博主 耍酷果汁,最近开发中收集的这篇文章主要介绍Qt 线程安全问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        最近做一个交互式的界面更新程序。用指令接收的线程去处理界面刷新的函数,发现会报错,并且界面也不刷新。经过百度,发现是线程安全问题。子线程是不可以处理主线程。发现有很多相关介绍,一个方法为 使用connect 方式的信号槽来处理。一个方式为moveToThread 来进行处理。我只完成了connect 方式,而moveToThread 没有通过验证,有通过的大神,请指教。

        下面为我的代码结构。

        一个为界面模型,里面包含 insert 函数。
    beginInsertRows(QModelIndex(), index, index);
    m_dataList.insert(index, data);
    endInsertRows(); //这个为产生异常原因

        一个为指令通信线程,接收从UI下传的指令。然后进行处理.

        while(isRunning())
        {

                switch(cmd)

                {

                        case INSERTDATA:

                                QVariant data(json);

                                emit signalToUpdate(data);

                        break;

                }

        }

采用connect 关联槽函数。

connect(this,&CmdProcess::signalToUpdate,this,&CmdProcess::startToUpdate);

void CmdProcess::startToUpdate(QVariant  data)

{

        QJsonObject msg = data.toJsonObject(); //采用了QJsonObject 需要进行类型转换。

        Append(msg);

}
关于为什么需要线程,主要是防止在直接的回调里面会产生阻塞,从而导致界面卡顿。   

最后

以上就是耍酷果汁为你收集整理的Qt 线程安全问题的全部内容,希望文章能够帮你解决Qt 线程安全问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部