Вопрос

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

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

Это было полезно?

Решение

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

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 ++. Там вы получаете классы для потоков, блокировок, мьютексов и т. Д. И можете выполнять многопоточность гораздо более объектно-ориентированным способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top