Multithreading Qt4将QThread信号与主线程插槽连接
好了,我们开始吧: 这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,Worker和p4,p4向Worker发送等待时间和其他参数,我希望在不同的线程中处理,但随后用结果更新主线程 所以,Worker.h看起来像这样:Multithreading Qt4将QThread信号与主线程插槽连接,multithreading,qt4,signals,slots,Multithreading,Qt4,Signals,Slots,好了,我们开始吧: 这在互联网上到处都是,但它似乎对我不起作用,问题是我有两个线程,Worker和p4,p4向Worker发送等待时间和其他参数,我希望在不同的线程中处理,但随后用结果更新主线程 所以,Worker.h看起来像这样: #include <QObject> class Worker : public QObject { Q_OBJECT public: int time; int actual_weight; int supporte
#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();
};
#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();
}
问题是SLOT update_gui()是在主窗口头中定义的,并在.cpp中实现,但它永远无法执行
我已经尝试连接Qt::DirectConnection,gui也会更新,但是当worker完成时。。。整个节目结束了
我看了,但没有为我工作(或我不明白),也看了,但这表明我试图做的是不安全的
请帮帮我,我做错了什么?你的代码适合我。您尚未发布的代码中可能有错误。特别是,从主窗口类中看到更多的代码会很有帮助调用代码>太晚,实际连接的类型为“直接”?:)
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();