将多个参数传递给pthread_create

rsc*_*rin 2 c parameters multithreading pthreads

可能重复:
pthread_create()调用的函数的多个参数?
如何将多个值作为参数传递给C中的线程?

我有这些结构:

struct Request {
    char buf[MAXLENREQ];
    char inf[MAXLENREQ]; /* buffer per richiesta INF */
    int lenreq;
    uint16_t port; /* porta server */
    struct in_addr serveraddr; /* ip server sockaddr_in */
    char path[MAXLENPATH];
    /*struct Range range;*/
};

struct RequestGet {
    char buf[MAXLENREQ];
    int maxconnect;
    struct Range range;
};

struct ResponseGet{
    char buf[MAXLENDATA];
    //int LenRange;
    int expire;
    char dati[MAXLENDATA];
    struct Range range; 
};
Run Code Online (Sandbox Code Playgroud)

我怎么能把它们传递给pthread_create?无论每个结构领域的含义如何.

pthread_create(&id,NULL,thread_func,????HERE????);
Run Code Online (Sandbox Code Playgroud)

Dan*_*ego 6

您只能传递一个参数,因此您通常需要创建一个带有一个参数的函数,即使它只包含其他一些调用.你可以通过创建一个struct并让函数获取指向这样的指针来实现struct.

下面说明这一点的基本示例如下.请注意,它不是一个完整的例子,应该按原样使用!请注意,例如,没有malloc()释放分配的内存.

struct RequestWrapper {
    struct Request *request;
    struct RequestGet *request_get;
    struct ResponseGet *response_get;
};

void thread_func(struct RequestWrapper *rw) {
    // function body here
}

int main(int argc, char *argv[]) {
    struct Request *request = malloc(sizeof(*request));
    struct RequestGet *request_get = malloc(sizeof(*request_get));
    struct ResponseGet *response_get = malloc(sizeof(*response_get));
    ...

    struct RequestWrapper *wrapper = malloc(sizeof(*wrapper));

    wrapper->request = request;
    wrapper->request_get = request_get;
    wrapper->response_get = response_get;

    ...

    pthread_create(&id, NULL, thread_func, &wrapper);
    ...
}
Run Code Online (Sandbox Code Playgroud)