gpt4 book ai didi

C程序: pass function as parameter to another function to create thread

转载 作者:行者123 更新时间:2023-11-30 18:35:17 25 4
gpt4 key购买 nike

我需要一些帮助。我已经做了几个小时了,但无法让它发挥作用。一般来说,我有一个访问内核驱动程序的函数,我想将该函数作为参数传递给另一个包含一些 pthread 代码的函数。我研究发现我可能需要一个函数指针。

这是我想作为参数传递的函数。

static void kernelTest(char Send[BUFFER_LENGTH])
{
int fd = open("/dev/kernelTest", O_RDWR);
}

这是我要传入的函数:

static void createKThread(void (*f)(char *))
{
pthread_t t1;
int ret;
ret = pthread_create(&t1, NULL, (*f)(char), NULL);
pthread_join(t1, NULL);
}

我尝试了函数指针,但它给了我错误。

 error: expected expression before ‘char’

我非常感谢所提供的任何帮助。谢谢!

最佳答案

(*f)(char) 是无效语法。您似乎正在尝试调用函数 f 并将 char 作为参数传递,但您无法执行此操作。

由于您实际上并未调用 f,因此只需将其直接传递给 pthread_create:

ret =  pthread_create(&t1, NULL, f, NULL);

但是,这仍然存在问题。 pthread_create 的第三个参数应为 void *(*)(void *) 类型,即指向具有 void *< 的函数的指针 参数并返回一个 void *。您的函数的类型为 void (*)(char *),因此参数不兼容。

您需要更改 kernelTest 的签名以匹配 pthread_create 的期望:

static void *kernelTest(void *param)
{
char *send = param;
int fd = open("/dev/kernelTest", O_RDWR);
return NULL;
}

或者您需要创建一个与pthread_create匹配的包装函数:

static void *kernelTest_wrapper(void *param)
{
char *send = param;
kernelTest(send);
return NULL;
}

关于C程序: pass function as parameter to another function to create thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47265230/

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