我是靠谱客的博主 耍酷果汁,这篇文章主要介绍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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部