Qt在不同的线程中启动功能

时间:2016-05-17 09:10:58

标签: c++ multithreading qt

这是我的GUI类:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_CallEndlessLoop_clicked();

private:
    Ui::MainWindow *ui;
    void myEndlessLoopFunc();

protected:
    void closeEvent(QCloseEvent *event);
};

由于我必须使用GUI,因此我想在单击pushButton CallEndlessLoop时在不同的线程中启动myEndlessLoopF​​unc()。

这就是我所做的功能:

void MainWindow::on_pushButton_CallEndlessLoop_clicked()
{
  QFuture<void> future = QtConcurrent::run(myEndlessLoopFunc());  
}

编译器给我消息&#34;无效使用void表达式&#34;。我包括&#34; QtConcurrent&#34;。我不知道我做错了什么,或者我不得不以不同的方式做。

任何帮助表示赞赏....提前致谢。

1 个答案:

答案 0 :(得分:0)

您没有不受欢迎的问题来源。您在调用中缺少this参数:

void MainWindow::on_pushButton_CallEndlessLoop_clicked()
{
  QFuture<void> future = QtConcurrent::run(this, &MainWindow::myEndlessLoopFunc);  
}

http://doc.qt.io/qt-4.8/qtconcurrentrun.html#using-member-functions 所有方法都没有明确的参数,你必须传递给QtConcurrent::run函数。