2011-04-23 70 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