#define PI_THREAD(X)void * X(void * dummy)

时间:2013-10-08 02:57:17

标签: c linux multithreading macros

此PI_THREAD(X)定义为void * X(void * dummy),其中一个函数具有自己的名称。 return void *和void *作为参数。我不知道它与线程有什么关系。

此宏的用法,

  /*
 * softPwmThread:
 *  Thread to do the actual PWM output
 *********************************************************************************
 */

static PI_THREAD (softPwmThread)
{
  int pin, mark, space ;

  pin    = newPin ;
  newPin = -1 ;

  piHiPri (50) ;

  for (;;)
  {
    mark  = marks [pin] ;
    space = range [pin] - mark ;

    if (mark != 0)
      digitalWrite (pin, HIGH) ;
    delayMicroseconds (mark * 100) ;

    if (space != 0)
      digitalWrite (pin, LOW) ;
    delayMicroseconds (space * 100) ;
  }

  return NULL ;
}

在Linux中,线程与pthread对象有关吗?这个void * X(void * dummy)如何与线程相关?

2 个答案:

答案 0 :(得分:1)

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
               void *(*start_routine) (void *), void *arg);

您可以看到某个帖子的start_routine有一个参数为void *的原型,并返回void *

在您的示例中,该函数不需要参数即可工作,也不需要返回任何有意义的参数。但它仍然必须有这样的原型用于创建新线程。所以宏:

#define PI_THREAD(X) void *X (void *dummy)

dummy是无效的参数,您需要在函数中return NULL来遵守原型。

答案 1 :(得分:1)

pthreads API创建运行用户指定函数的线程。 pthread_create函数假定此函数具有签名

void* function(void* arg);

因此,宏定义接受void*并返回void*的函数是有意义的,因为这是将被调用并作为线程例程运行的函数的签名。

希望这有帮助!