我试图了解信号/插槽如何在 GUI 程序中工作。例如,如果主程序中的一个槽收到信号,它是否会创建另一个线程来处理该槽?
主窗口.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void finished_result(int);
private:
Ui::MainWindow *ui;
QThread* thread;
Worker* worker;
private slots:
void run_click();
};
主窗口.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow){
ui->setupUi(this);
}
MainWindow::~MainWindow(){
delete ui;
}
void MainWindow::run_click(){
thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(worker,SIGNAL(task_finished(int)),this,SLOT(finished_result(int)));
// all other necessary signal/slot connections
thread->start();
// do more stuff
}
void MainWindow::finished_result(int x){
// do some stuff
}
在这样的程序中,假设“做更多的事情”需要一段时间来处理,并且工人在run_click()
返回之前完成工作。所以在发出run_click()
时仍然会运行。task_finished(int)
将finished_result(int)
立即开始还是等待run_click()
完成?将finished_result(int)
在同一个线程中开始run_click()
还是在新线程中开始?
我的特殊问题是我的QWaitCondition
“做更多事情”中有一个不相关的内容,它会保留该线程一段时间。我希望我finished_result(int)
继续前进而不等待run_click()
完成。任何想法如何进行?我是否需要在新线程中将“做更多事情”转移给另一个工人?