gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:14 27 4
gpt4 key购买 nike

这个 PI_THREAD(X) 被定义为 void*X(void * dummy) ,它是一个有自己名字的函数。返回 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) 与线程有什么关系?

最佳答案

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

可以看到线程的start_routine有一个原型(prototype),就是接受一个void *的参数,返回一个void *

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

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

dummy是没有用的参数,需要在函数中return NULL来符合原型(prototype)。

关于c - #define PI_THREAD(X) void *X (void *dummy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com