我对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));
}
但是当我编译时,我得到以下错误:
错误:左值作为一元'&amp;'操作数 return(pthread_create(&amp; this-&gt; th,NULL,&amp; run_helper(arg),(void *)(intptr_t)arg));
错误:'this'不适用于静态成员函数 return(Thread *)this-&gt; run(num);
尽管尝试过,但我似乎无法使这种封装工作。
答案 0 :(得分:1)
我认为您的问题可能是&this->th
。 &
的优先级高于->
。也许试试&(this->th)
。
答案 1 :(得分:0)
对于第一个错误,您需要将第三个参数转换为(void*(*)(void*))
并删除&
(可能不需要转换)。
pthread_create(&this->th, NULL, (void*(*)(void*))run_helper(arg), (void *)(intptr_t)arg);
第二个错误,你试图在静态函数中使用指向this
的指针,但是没有在任何对象上调用该函数,因此你不能在函数中使用this
那。解决方案是将arg
转换为Thread*
,然后调用非静态run
函数。