我在mainwindow.h类文件(标题?)中对我的函数进行了原型设计:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
void receiveP();
然后在我的main.cpp类文件中,我告诉函数该做什么:
void MainWindow::receiveP()
{
dostuff
}
然后在main.cpp类文件的main函数中,我尝试在一个线程中使用它:
std::thread t1(MainWindow::receiveP);
t1.detach();
这给了我错误"无效使用非静态成员函数' void MainWindow :: receiveP()'。
答案 0 :(得分:6)
您正在尝试将成员函数指针传递给thread
类的构造函数,该构造函数需要一个普通(非成员)函数指针。
传入一个静态方法函数指针(或指向一个自由函数的指针),并明确地给它一个对象的实例:
// Header:
static void receivePWrapper(MainWindow* window);
// Implementation:
void MainWindow::receivePWrapper(MainWindow* window)
{
window->receiveP();
}
// Usage:
MainWindow* window = this; // Or whatever the target window object is
std::thread t1(&MainWindow::receivePWrapper, window);
t1.detach();
确保线程在窗口对象被破坏之前终止。