簡體   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