2010-03-18 2 views
1

Я играю с C++ и pthreads, и пока все хорошо. Я могу получить доступ к функции-члену класса, если она статична, и я прочитал, что могу получить доступ к обычным функциям-членам класса, если передаю «это» в качестве аргумента с pthread_create, потому что C++ делает это под капотом. Но моя проблема в том, что я хочу дать int этой функции, и я не знаю, как сделать несколько аргументов с pthread_create.pthreads и C++

ответ

6

Пропустить указатель структуры.

struct Arg { 
    MyClass* _this; 
    int  another_arg; 
}; 

... 

Arg* arg = new Arg; 
arg->_this = this; 
arg->another_arg = 12; 
pthread_create(..., arg); 
... 
delete arg; 
+0

Что мне делать с _this в Си ++? Ничего? – vincentkriek

+0

@user: «Доступ к функциям элемента обычного класса». – kennytm

+0

Я думаю, что было неясно, чтобы pthread_create выполнял функции C++, они должны быть статическими. Я бы хотел, чтобы они не были статичными, если это возможно. – vincentkriek

0

вы можете попробовать повысить библиотеку потока и использовать повышение :: Bind() Вот пример,

class MyThread 
{ 
public: 
    MyThread(/* Your arguments here */) : m_thread(NULL) 
    { 
     m_thread = new boost::thread(boost::bind(&MyThread::thread_routine, this)); 
    } 

    ~MyThread() 
    { 
     stop(); 
    } 

    void stop() 
    { 
     if (m_thread) 
     { 
      m_thread->interrupt(); 
      m_thread->join(); 
     } 
    } 

private: 
    void thread_routine() {... /* you can access a/b here */} 


private: 
    int a; 
    int b; 
    boost::thread *m_thread; 
};