2

よし、どうぞ:

これはインターネット全体にありますが、私にとってはうまくいかないようです。問題は、ワーカーとp4の2つのスレッドがあり、p4が待機時間と他のパラメーターをワーカーに送信し、それを処理したいことです。別のスレッドで実行しますが、結果でメイン スレッドを更新します。

そのため、Worker.h は次のようになります。

 #include <QObject>

class Worker : public QObject
{
    Q_OBJECT
public:
    int time;
    int actual_weight;
    int supported_weigth;

    Worker();
    ~Worker();

public slots:
    void process();

signals:
    void finished();
};

Worker.cpp は次のようになります。

#include "worker.h"

#include <QDebug>
#include <iostream>

using namespace std;

Worker::Worker()
{
}

Worker::~Worker(){

}

void Worker::process(){

    cout << "sleep!" << endl;
    sleep(this->time);
     cout << "done!" << endl;
    //more_nonsense_stuff();
    emit finished();

}

そして、私のメインスレッドにはこれがあります:

QThread* t = new QThread;
Worker* w = new Worker();
w->time = this->transactions[i].time;
connect(t, SIGNAL(started()), w, SLOT(process()));
connect(w, SIGNAL(finished()), this, SLOT(update_gui()));
w->moveToThread(t);
t->start();

問題は、SLOT update_gui() がメイン ウィンドウ ヘッダーで定義され、.cpp で実装されていることですが、実行されることはありません。

Qt::DirectConnection をアタッチしようとしましたが、GUI の更新が行われましたが、ワーカーが終了すると... プログラム全体が閉じます。

私はこれを見ましが、うまくいきませんでした(または理解できませんでした)、これも見ましが、私がやろうとしていることは安全ではないと言っています??

助けてください、私は何が間違っていますか?

4

0 に答える 0