C - pthread参数

时间:2016-04-06 09:26:52

标签: c pthreads

这是我第一次使用C语言中的线程,我遇到了传递函数参数的问题。出于某些原因,我需要创建此线程。 我有一个向服务器发送消息的功能。我的函数的标题是:

void* sender (char* payload, void (*Callback)(char*))

然后在我的主要(简化)上,我创建了以下线程:

main ()
{
    pthread_t sender_id;
    int err_s;  

    err_s = pthread_create (&sender_id, NULL, &sender, NULL);
}

问题是我的函数发送者有很多参数,所以我收到了这个错误:

note: expected 'void * (*)(void *)' but argument is of type 'void * (*)(char *, void (*)(char *))'

如果sombody可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以创建一个结构,让我们说:

struct thread_prm
{
char *payload;
void (*Callback)(char*) cb;
}

您只需分配一个看起来像这样的结构,并将其作为最后一个参数传递给pthread_create。像这样:

struct thread_prm *arg;
arg = malloc(sizeof(struct thread_prm));
(assign arg members to something)
pthread_create(&sender_id, NULL, &sender, arg);

你修改发件人:

void* sender (void *arg)
{
struct thread_prm *_arg = arg;
char* payload;
void (*Callback)(char*) cb;

payload = _arg->payload;
cb = _arg->cb;
...
}