У меня есть следующая инкапсуляция для моих pthread_t
нитей:Инкапсуляция Темы создает проблемы
#include <pthread.h>
class Thread
{
public:
void run(const int);
static void *run_helper(void *);
bool startThread(int);
void joinThread();
pthread_t th;
};
Где run
это моя рутина нити, и run_helper
является следующее:
void *Thread::run_helper(int num)
{
return (Thread *)this->run(num);
}
Я начинаю мои темы, как например :
bool Thread::startThread(intptr_t arg)
{
return (pthread_create(&this->th, NULL, &run_helper(arg), (void *)(intptr_t)arg));
}
Но когда я компиляции, я получаю следующие ошибки:
error: lvalue required as unary ‘&’ operand return (pthread_create(&this->th, NULL, &run_helper(arg), (void *)(intptr_t)arg));
error: ‘this’ is unavailable for static member functions return (Thread *)this->run(num);
И несмотря на попытки, я не могу показаться, чтобы сделать эту работу инкапсуляции.
Первая ошибка в сторону. Не могли бы вы проиллюстрировать второе решение? –
'((Thread *) arg) -> run()', но я не знаю, как включить аргумент в 'intptr_t', вы можете придерживаться' void * ' – mausik