C++ 从类运行方法的Pthread实例变量

C++ 从类运行方法的Pthread实例变量,c++,multithreading,oop,class,pthreads,C++,Multithreading,Oop,Class,Pthreads,我正在尝试设计一个活动对象,它一旦创建,基本上运行在它自己的线程中。到目前为止,我所做的是创建一个包含pthread实例变量的类,然后在该类的构造函数中,它应该发送pthread 由于pthread_create()接受函数参数,因此我将在类实现文件中为其传递一个run()函数 到目前为止,我的run()函数不是类的一部分,它只是放在实现文件中,但是当我试图编译它时,我得到一个错误,它说: "error: ‘run’ was not declared in this scope" 现在我理解了

我正在尝试设计一个活动对象,它一旦创建,基本上运行在它自己的线程中。到目前为止,我所做的是创建一个包含pthread实例变量的类,然后在该类的构造函数中,它应该发送pthread

由于pthread_create()接受函数参数,因此我将在类实现文件中为其传递一个run()函数

到目前为止,我的run()函数不是类的一部分,它只是放在实现文件中,但是当我试图编译它时,我得到一个错误,它说:

"error: ‘run’ was not declared in this scope"
现在我理解了函数run()超出范围的原因,但是将run()作为私有函数添加到我的活动对象类中是正确的,还是如果存在多个这样的对象会导致其他问题?见鬼,如果只实例化其中一个,会不会导致问题

好的,这是代码,我只是觉得没什么关系。这是MyClass.hpp

class MyClass {

private:
pthread_t thread;

    ObjectManager *queue;
int error;

    // just added this, but the compiler still doesn't like it
    void *run(void *arg);

public:

    MyClass();
    ~MyClass();

void start();
}
下面是实现MyClass.cpp:

#include "MyClass.hpp"

void MyClass::start() {
if (queue == NULL)
    return;

int status = pthread_create(&thread, NULL, run, (void *) queue);
if (status != 0) {
    error = status;
    return;
}

}


void *MyClass::run(void *arg) {
bool finished = false;
while (!finished) {
        // blah blah blah
}
return NULL;
}

编译问题可能是在构造函数中引用了实现文件后,在实现文件中定义了
run
。将
run
的定义移动到构造函数之前,或在构造函数之前插入
run
的声明


至于让它成为不能作为
pthread\u create
工作的类成员的问题,您正在寻找一个非成员函数。您可以将其作为类的静态方法,但在决定这样做是否安全之前请先阅读(现在您知道如何使用原始函数,不需要阅读)。

请显示代码,否则将很难提供任何帮助OK,只是尝试将其作为类函数添加,由于类型不匹配,它将无法编译。它正在寻找void()(void*),并且正在获得void(MyClass::)(void)。可能是简单的副本,谢谢。我不知道为什么我会错过这个,但是谢谢你。这个问题已经被问了很多次了。“静态成员函数总是出现,但它始终是错误的。@Martin-我作为第二次尝试添加的成员函数,第一次完全按照Troubadour所说的那样出现了故障。我知道为什么第二种方法在报告错误后不起作用。@Roflha:阅读上面的问题。使用静态成员函数作为pthreads的回调是不可移植的,因此不应该这样做。马丁:谢谢你指出类静态方法的问题。我不知道。