封装线程会产生问题

时间:2016-04-21 15:14:36

标签: c++ multithreading pthreads

我对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);

尽管尝试过,但我似乎无法使这种封装工作。

2 个答案:

答案 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函数。