2

好吧,我们开始:

这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,Worker 和 p4,p4 向 worker 发送等待时间和其他参数,我希望它被处理在不同的线程中,然后用结果更新主线程。

所以,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