mem_fun терпит неудачу, pthread и класс ptr - PullRequest
0 голосов
/ 19 января 2009

pthread принимает в качестве параметра void *(*start_routine)(void* userPtr), я надеялся, что смогу использовать std::mem_fun для решения своей проблемы, но не могу.

Я хотел бы использовать функцию void * threadFunc() и иметь userPtr в качестве класса (userPtr->threadFunc()). Есть ли функция, похожая на std::mem_func, которую я могу использовать?

1 Ответ

2 голосов
/ 19 января 2009

Один из способов - использовать глобальную функцию, которая вызывает функцию основного потока:

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

Затем, когда вы хотите запустить поток:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

С другой стороны, если вам действительно не нужно использовать pthreads вручную, было бы неплохо взглянуть на Boost.Thread , хорошую библиотеку потоков C ++. Там вы получаете классы для потоков, блокировок, мьютексов и т. Д. И можете выполнять многопоточность гораздо более объектно-ориентированным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...