此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)如何与线程相关?
答案 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*
的函数是有意义的,因为这是将被调用并作为线程例程运行的函数的签名。
希望这有帮助!