繁体   English   中英

std :: thread :: thread( <unresolved overloaded function type> )在Qt中

[英]std::thread::thread(<unresolved overloaded function type>) in Qt

我在该网站上阅读的其他答案似乎与我的问题无关。 无论如何,在我的mainwindow.cpp文件中,我有一个需要访问ui名称空间的函数:

 do
    {
        intrecv= recv(s1, buffer, 10000,0);
        if(intrecv > 0)
        {
            recvData = buffer;
            ui->textEdit->setText("Connection occurred.\n");
        }   
    }while(intrecv > 0);

这是我的预处理器命令:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <thread>
#include <string>
#include <QString>

在我的mainwindow.h文件中,接收函数原型如下:

    class MainWindow : public QMainWindow
{
    Q_OBJECT
    void receiveFunction();

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

private slots:
    void on_pushButton_clicked();

    void on_lineEdit_returnPressed();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

然后,在mainwindow.cpp中,我在另一个函数的线程中调用了该接收函数:

    void MainWindow::on_pushButton_clicked()
{
    connectFunction();
    std::thread t1(receiveFunction);
    t1.detach();
}

您可以尝试复制我的问题的一个示例是创建一个按钮和一个textEdit字段。 让按钮的插槽调用一个用于编辑textEdit字段的函数。

编辑:我忘了提一下:在我的迷你示例中,不仅仅是让它编辑textEdit字段,让它接收数据并编辑textEdit字段。

错误消息似乎暗示reveiveFunction函数有多个重载,但这可能会引起误解(如果上面的代码正确)。 该行有两个固有的错误:

std::thread t1(receiveFunction);

首先,如果不提供类型限定条件,就不能获取成员函数的地址(并且成员函数不会衰减到指向成员函数的指针)。 第二个问题是,非静态成员函数需要一个您将不提供的对象,该对象将在该对象上被调用。 该语句可以通过执行以下操作来修复:

std::thread t1(&MainWindow::receiveFunction, this);

这将正确地获取成员函数的地址,并提供将在其上评估函数的this指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM