2011-04-23 56 views
1

我在我当前的项目中有一个小问题,因为我想在创建我的线程时使用对象方法。我红色,这是不可能的,没有声明这种方法是静态的。 有什么想法?pthreads与对象的方法

public: 
     CModelisation (int argc, char **argv, char[]); 
    ~CModelisation(); 

    void Init(); 
    void *RunMainLoop (void* args); 
}; 

CModelisation.cpp

void *CModelisation::RunMainLoop (void* args) 
{ 
    glutDisplayFunc(Display); 
    glutIdleFunc(Display); 
    glutReshapeFunc(Redisplay); 
    glutMotionFunc(Mouse); 
    glutKeyboardFunc(Keyboard); 
    glutMainLoop(); 
    return args; 
} 

主要

threads[1] = new CThread(); 
    threads[1]->exec(Model->RunMainLoop,(void*)1); 

THX!

回答

2

我相信这是常见的做法是创建任何线程方法的包装功能:

struct Foo { 

    void someMethod() { 
     // ... the actual method ... 
    } 
    static void* someMethodWrap(void* arg) { 
     ((Foo*) arg)->someMethod(); 
     return 0; 
    } 

    void callSomeMethodInOtherThread() { 
     pthread_create(thread, attr, someMethodWrap, this); 
    } 
}; 

传递额外的参数需要更多的努力,但这是总体思路。

幸运的是,来自下一个标准的std::thread使我们的生活变得更加轻松...但这仍然是未来。

+0

工作正常!谢谢 ! – Athanase 2011-04-23 22:03:42

1

一般的做法是将静态方法添加到接收实例的对象作为参数。然后,您可以轻松调用所需的任何成员方法。

一个很好的例子可以在这里找到:pthread function from a class

+0

工作正常!谢谢 ! – Athanase 2011-04-23 22:02:21