pthread_create() как правильно работает?

273
26 ноября 2016, 18:54

У меня проблемы с использованием pthread_create если передавать в аргумент метод класса, потому что компилятор постоянно выдает ошибку:

cannot convert 'void* (Server::*)(void*)' to 'void* (*)(void*)' for argument '3' to 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)'    Server.cpp

у меня есть класс Server,у него есть приватный член pthread_t receivingThread_; публичная функция void myFunc1() и еще публичная функция void* myFunc2(void *args) которая возвращает 0.

Тут описание функции, где я делаю вызов pthread_create()

myFunc1(){
pthread_create(&receivingThread_,NULL,&Server::myFunc2,NULL);
}

Однако не работает, скорее всего где то обычная ошибка, но почитав другие вопросы, я не могу понять как мне исправить свою. Заранее спасибо за помощь.

Answer 1

Вызвать нестатический член класса без указания объекта класса - нонсенс.

Если бы это был стандартный для C++ std::thread, то ему можно было бы передать первым параметром this и он бы радостно заработал - он достаточно умен для понимания таких вещей...

Но поскольку pthreads, по большому счету, C-библиотека, то нужен обходной путь - создание свободной функции, которая будет вызывать функцию-член для конкретного объекта.

READ ALSO
проблема с дружественной функцией

проблема с дружественной функцией

Я новичек в С++, объясните пожалуйста, почему не отрабатывает дружественная функция в main? Имеется:

343
Пауза в бесконечном цикле по кнопке

Пауза в бесконечном цикле по кнопке

Консольное приложениеЕсть цикл, в нем по очереди вызываются 3 метода класса

229
emplace_back для int

emplace_back для int

‒ Ты понимаешь, что происходит? ‒ Тебе объяснить? ‒ Объяснить я и сам могу

327
Наследование абстрактного класса в C++

Наследование абстрактного класса в C++

Изучаю тему наследования по практикуму учебника 2010 годаТам есть пример, который я взял для изучения вопроса наследования, где используется...

539