Qt スレッドの安全性の問題

        最近、対話型インターフェースの更新プログラムを作成しました。命令を受け取ったスレッドでインターフェースリフレッシュ関数を処理すると、エラーが報告されインターフェースがリフレッシュされないことがわかります。Baidu を調べたところ、スレッドの安全性に問題があることがわかりました。子スレッドはメインスレッドを処理できません。関連する紹介がたくさんあることが分かりましたが、1つの方法として、Connect Signalスロットを使用して処理する方法があります。1 つの方法は、moveToThread でそれを処理することです。connectメソッドだけは完了したのですが、moveToThreadの検証が通らなかったのですが、検証を通った方はいらっしゃいますか?アドバイスをお願いします。

        以下は私のコード構造です。

        1 つは、挿入関数を含むインターフェイス モデルです。
    beginInsertRows(QModelIndex(),index,index);
    m_dataList.insert(index, data);
    endInsertRows(); //これが例外の理由です

        1 つは、UI からの命令を受け取る命令通信スレッドです。それからそれを処理します。

        while(isRunning())
        {

                スイッチ(cmd)

                {

                        ケースの挿入データ:

                                QVariantデータ(json);

                                signalToUpdate(data) を発行します。

                        壊す;

                }

        }

接続関連スロット機能を使用します。

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

void CmdProcess::startToUpdate(QVariant データ)

{

        QJsonObject msg = data.toJsonObject(); //QJsonObject を使用するには型変換が必要です。

        追加(メッセージ);

スレッドが必要な理由については、
主な理由は、インターフェイスのフリーズを引き起こす直接コールバックでのブロックを防ぐためです。   

おすすめ

転載: blog.csdn.net/dreamliweiming/article/details/126786921